Auf dieser Seite

QSqlQueryModel Class

Die Klasse „QSqlQueryModel“ stellt ein schreibgeschütztes Datenmodell für SQL-Ergebnismengen bereit. Mehr...

Überschrift: #include <QSqlQueryModel>
CMake: find_package(Qt6 REQUIRED COMPONENTS Sql)
target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmake: QT += sql
Erbt von: QAbstractTableModel
Vererbt an:

QSqlTableModel

Öffentliche Funktionen

QSqlQueryModel(QObject *parent = nullptr)
virtual ~QSqlQueryModel()
virtual void clear()
QSqlError lastError() const
const QSqlQuery &query() const
QSqlRecord record(int row) const
QSqlRecord record() const
(since 6.9) void refresh()
(since 6.2) void setQuery(QSqlQuery &&query)
void setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase())

Neu implementierte öffentliche Funktionen

virtual bool canFetchMore(const QModelIndex &parent = QModelIndex()) const override
virtual int columnCount(const QModelIndex &index = QModelIndex()) const override
virtual QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const override
virtual void fetchMore(const QModelIndex &parent = QModelIndex()) override
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override
virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
virtual QHash<int, QByteArray> roleNames() const override
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override
virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override

Geschützte Funktionen

virtual QModelIndex indexInQuery(const QModelIndex &item) const
virtual void queryChange()
void setLastError(const QSqlError &error)

Ausführliche Beschreibung

QSqlQueryModel ist eine hochrangige Schnittstelle zur Ausführung von SQL-Anweisungen und zum Durchlaufen der Ergebnismenge. Es baut auf dem unterlagerten „ QSqlQuery “ auf und kann verwendet werden, um Daten für Ansichtsklassen wie „ QTableView “ bereitzustellen. Beispiel:

    QSqlQueryModel *model = new QSqlQueryModel;
    model->setQuery("SELECT name, salary FROM employee");
    model->setHeaderData(0, Qt::Horizontal, tr("Name"));
    model->setHeaderData(1, Qt::Horizontal, tr("Salary"));
    QTableView *view = new QTableView;
    view->setModel(model);
    view->show();

Wir legen die Abfrage des Modells fest und richten anschließend die in der View-Kopfzeile angezeigten Beschriftungen ein.

QSqlQueryModel kann auch verwendet werden, um programmgesteuert auf eine Datenbank zuzugreifen, ohne sie an eine Ansicht zu binden:

    QSqlQueryModel model;
    model.setQuery("SELECT name, salary FROM employee");
    int salary = model.record(4).value("salary").toInt();

Der obige Codeausschnitt extrahiert das Feld „ salary “ aus Datensatz 4 der Abfrage „ SELECT “. Da „ salary “ die zweite Spalte (bzw. Spaltenindex 1) ist, können wir die letzte Zeile wie folgt umschreiben:

    int salary = model.data(model.index(4, 1)).toInt();

Das Modell ist standardmäßig schreibgeschützt. Um es schreibbar zu machen, müssen Sie eine Unterklasse davon erstellen und die Methoden ` setData()` sowie ` flags()` neu implementieren. Eine weitere Möglichkeit ist die Verwendung von ` QSqlTableModel`, das ein schreibbares Modell auf Basis einer einzelnen Datenbanktabelle bereitstellt.

Das Beispiel „querymodel“ veranschaulicht, wie man mit `QSqlQueryModel` das Ergebnis einer Abfrage anzeigt. Es zeigt außerdem, wie man eine Unterklasse von `QSqlQueryModel` erstellt, um den Inhalt der Daten anzupassen, bevor sie dem Benutzer angezeigt werden, und wie man ein Lese-Schreib-Modell auf Basis von `QSqlQueryModel` erstellt.

Wenn die Datenbank bei einer Abfrage nicht die Anzahl der ausgewählten Zeilen zurückgibt, ruft das Modell die Zeilen schrittweise ab. Weitere Informationen finden Sie unter fetchMore().

Siehe auch QSqlTableModel, QSqlRelationalTableModel, QSqlQuery, Modell-/Ansichtsprogrammierung und Beispiel für ein Abfragemodell.

Dokumentation zu Mitgliedsfunktionen

[explicit] QSqlQueryModel::QSqlQueryModel(QObject *parent = nullptr)

Erstellt ein leeres QSqlQueryModel mit dem angegebenen „ parent “.

[virtual noexcept] QSqlQueryModel::~QSqlQueryModel()

Löscht das Objekt und gibt alle zugewiesenen Ressourcen frei.

Siehe auch ` clear()`.

[override virtual] bool QSqlQueryModel::canFetchMore(const QModelIndex &parent = QModelIndex()) const

Implementiert: ` QAbstractItemModel::canFetchMore(const QModelIndex &parent) const`.

Gibt ` true ` zurück, wenn weitere Zeilen aus der Datenbank gelesen werden können. Dies betrifft nur Datenbanken, die die Größe einer Abfrage nicht zurückgeben (siehe ` QSqlDriver::hasFeature()`).

parent sollte immer ein ungültiger ` QModelIndex` sein.

Siehe auch ` fetchMore()`.

[virtual] void QSqlQueryModel::clear()

Löscht das Modell und gibt alle belegten Ressourcen frei.

[override virtual] int QSqlQueryModel::columnCount(const QModelIndex &index = QModelIndex()) const

Implementiert: ` QAbstractItemModel::columnCount(const QModelIndex &parent) const`.

[override virtual] QVariant QSqlQueryModel::data(const QModelIndex &item, int role = Qt::DisplayRole) const

Umsetzung von: ` QAbstractItemModel::data(const QModelIndex &index, int role) const`.

Gibt den Wert für die angegebenen Parameter ` item ` und ` role` zurück.

Liegt item außerhalb des zulässigen Bereichs oder ist ein Fehler aufgetreten, wird ein ungültiger QVariant zurückgegeben.

Siehe auch lastError().

[override virtual] void QSqlQueryModel::fetchMore(const QModelIndex &parent = QModelIndex())

Implementiert: QAbstractItemModel::fetchMore(const QModelIndex &parent).

Ruft weitere Zeilen aus einer Datenbank ab. Dies betrifft nur Datenbanken, die die Größe einer Abfrage nicht zurückgeben (siehe QSqlDriver::hasFeature()).

Um das Abrufen des gesamten Ergebnissatzes zu erzwingen, können Sie Folgendes verwenden:

while (myModel->canFetchMore())
    myModel->fetchMore();

parent sollte immer ein ungültiger QModelIndex sein.

Siehe auch ` canFetchMore()`.

[override virtual] QVariant QSqlQueryModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const

Implementiert: ` QAbstractItemModel::headerData(int section, Qt::Orientation orientation, int role) const`.

Gibt die Kopfzeilendaten für die angegebene ` role ` im ` section ` der Kopfzeile mit der angegebenen ` orientation` zurück.

Siehe auch setHeaderData().

[virtual protected] QModelIndex QSqlQueryModel::indexInQuery(const QModelIndex &item) const

Gibt den Index des Werts in der Datenbank-Ergebnismenge für die angegebene „ item “ im Modell zurück.

Der Rückgabewert entspricht „ item “, sofern keine Spalten oder Zeilen eingefügt, entfernt oder verschoben wurden.

Gibt einen ungültigen Modellindex zurück, wenn „ item “ außerhalb des zulässigen Bereichs liegt oder wenn „ item “ nicht auf einen Wert im Ergebnissatz verweist.

Siehe auch „ QSqlTableModel::indexInQuery()“, „ insertColumns()“ und „ removeColumns()“.

[override virtual] bool QSqlQueryModel::insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())

Implementiert: QAbstractItemModel::insertColumns(int column, int count, const QModelIndex &parent).

Fügt die Spalten „ count “ an der Position „ column “ in das Modell ein. Der Parameter „ parent “ muss immer ein ungültiger „ QModelIndex “ sein, da das Modell keine Eltern-Kind-Beziehungen unterstützt.

Gibt ` true ` zurück, wenn ` column ` innerhalb der zulässigen Grenzen liegt; andernfalls wird ` false` zurückgegeben.

Standardmäßig sind eingefügte Spalten leer. Um sie mit Daten zu füllen, implementieren Sie „ data()“ neu und behandeln Sie jede eingefügte Spalte separat:

QVariant MyModel::data(const QModelIndex &item, int role) const
{
    if (item.column() == m_specialColumnNo) {
        // handle column separately
    }
    return QSqlQueryModel::data(item, role);
}

Siehe auch ` removeColumns()`.

QSqlError QSqlQueryModel::lastError() const

Gibt Informationen zum letzten Fehler zurück, der in der Datenbank aufgetreten ist.

Siehe auch setLastError() und query().

const QSqlQuery &QSqlQueryModel::query() const

Gibt eine Referenz auf das mit diesem Modell verknüpfte const- QSqlQuery -Objekt zurück.

Siehe auch ` setQuery()`.

[virtual protected] void QSqlQueryModel::queryChange()

Diese virtuelle Funktion wird immer dann aufgerufen, wenn sich die Abfrage ändert. Die Standardimplementierung führt keine Aktion aus.

query() gibt die neue Abfrage zurück.

Siehe auch query() und setQuery().

QSqlRecord QSqlQueryModel::record(int row) const

Gibt den Datensatz zurück, der Informationen zu den Feldern der aktuellen Abfrage enthält. Wenn „ row “ der Index einer gültigen Zeile ist, wird der Datensatz mit den Werten dieser Zeile gefüllt.

Ist das Modell nicht initialisiert, wird ein leerer Datensatz zurückgegeben.

Siehe auch QSqlRecord::isEmpty().

QSqlRecord QSqlQueryModel::record() const

Gibt einen leeren Datensatz zurück, der Informationen zu den Feldern der aktuellen Abfrage enthält.

Wenn das Modell nicht initialisiert ist, wird ein leerer Datensatz zurückgegeben.

Dies ist eine überladene Funktion.

Siehe auch ` QSqlRecord::isEmpty()`.

[since 6.9] void QSqlQueryModel::refresh()

Führt die aktuelle Abfrage erneut aus, um die Daten über dieselbe Datenbankverbindung abzurufen.

Hinweis: „ refresh() “ ist nicht anwendbar, wenn die Abfrage gebundene Werte enthält.

Diese Funktion wurde in Qt 6.9 eingeführt.

Siehe auch „ setQuery“ (QSqlQuery &&query) und „ QSqlQuery::boundValue()“.

[override virtual] bool QSqlQueryModel::removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())

Implementiert neu: QAbstractItemModel::removeColumns(int column, int count, const QModelIndex &parent).

Entfernt „ count “-Spalten aus dem Modell, beginnend an der Position „ column “. Der Parameter „ parent “ muss immer ein ungültiger „ QModelIndex “ sein, da das Modell keine Eltern-Kind-Beziehungen unterstützt.

Das Entfernen von Spalten bewirkt, dass diese ausgeblendet werden. Es hat keine Auswirkungen auf die zugrunde liegenden „ QSqlQuery “.

Gibt „ true “ zurück, wenn die Spalten entfernt wurden; andernfalls wird „ false “ zurückgegeben.

[override virtual] QHash<int, QByteArray> QSqlQueryModel::roleNames() const

Implementiert neu: ` QAbstractItemModel::roleNames()` const.

Gibt die Rollennamen des Modells zurück.

Qt definiert nur eine Rolle für die ` QSqlQueryModel`:

Qt-RolleQML-Rollenname
Qt::DisplayRoledisplay

[override virtual] int QSqlQueryModel::rowCount(const QModelIndex &parent = QModelIndex()) const

Implementiert: ` QAbstractItemModel::rowCount(const QModelIndex &parent) const`.

Wenn die Datenbank die Rückgabe der Größe einer Abfrage unterstützt (siehe QSqlDriver::hasFeature()), wird die Anzahl der Zeilen der aktuellen Abfrage zurückgegeben. Andernfalls wird die Anzahl der Zeilen zurückgegeben, die derzeit auf dem Client zwischengespeichert sind.

parent sollte immer ein ungültiger ` QModelIndex` sein.

Siehe auch ` canFetchMore()` und ` QSqlDriver::hasFeature()`.

[override virtual] bool QSqlQueryModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole)

Implementiert: ` QAbstractItemModel::setHeaderData` (int section, Qt::Orientation orientation, const QVariant &value, int role).

Setzt die Beschriftung einer horizontalen Kopfzeile für das angegebene ` role ` auf ` value`. Dies ist nützlich, wenn das Modell zur Anzeige von Daten in einer Ansicht verwendet wird (z. B. ` QTableView`).

Gibt „ true “ zurück, wenn „ orientation “ „ Qt::Horizontal “ ist und „ section “ auf einen gültigen Abschnitt verweist; andernfalls wird „false“ zurückgegeben.

Beachten Sie, dass diese Funktion nicht zum Ändern von Werten in der Datenbank verwendet werden kann, da das Modell schreibgeschützt ist.

Siehe auch headerData() und data().

[protected] void QSqlQueryModel::setLastError(const QSqlError &error)

Geschützte Funktion, mit der abgeleitete Klassen den Wert des zuletzt in der Datenbank aufgetretenen Fehlers auf „ error “ setzen können.

Siehe auch ` lastError()`.

[since 6.2] void QSqlQueryModel::setQuery(QSqlQuery &&query)

Setzt das Modell zurück und legt den Datenanbieter auf die angegebene Adresse query fest. Beachten Sie, dass die Abfrage aktiv sein muss und nicht isForwardOnly() sein darf.

lastErrorMit () können detaillierte Informationen abgerufen werden, falls beim Einrichten der Abfrage ein Fehler aufgetreten ist.

Hinweis: Durch den Aufruf von `setQuery()` werden alle eingefügten Spalten entfernt.

Diese Funktion wurde in Qt 6.2 eingeführt.

Siehe auch query(), QSqlQuery::isActive(), QSqlQuery::setForwardOnly() und lastError().

void QSqlQueryModel::setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase())

Führt die Abfrage „ query “ für die angegebene Datenbankverbindung „ db “ aus. Wenn keine Datenbank (oder eine ungültige Datenbank) angegeben ist, wird die Standardverbindung verwendet.

lastErrorMit () können ausführliche Informationen abgerufen werden, falls beim Einrichten der Abfrage ein Fehler aufgetreten ist.

Beispiel:

QSqlQueryModel model;
model.setQuery("select * from MyTable");
if (model.lastError().isValid())
    qDebug() << model.lastError();

Dies ist eine überladene Funktion.

Siehe auch query(), queryChange() und lastError().

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.