QSqlQueryModel Class
Die Klasse QSqlQueryModel bietet ein schreibgeschütztes Datenmodell für SQL-Ergebnismengen. Mehr...
Kopfzeile: | #include <QSqlQueryModel> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Sql) target_link_libraries(mytarget PRIVATE Qt6::Sql) |
qmake: | QT += sql |
Vererbt: | QAbstractTableModel |
Vererbt von: |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- Veraltete Mitglieder
- QSqlQueryModel ist Teil von Database Classes.
Ö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.2) void | setQuery(QSqlQuery &&query) |
void | setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase()) |
Reimplementierte ö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) |
Detaillierte Beschreibung
QSqlQueryModel ist eine High-Level-Schnittstelle für die Ausführung von SQL-Anweisungen und das Durchlaufen der Ergebnismenge. Sie baut auf der unteren Ebene QSqlQuery auf und kann verwendet werden, um Daten für Ansichtsklassen wie QTableView bereitzustellen. Ein 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 stellen die Abfrage des Modells ein, dann richten wir die Beschriftungen ein, die in der Kopfzeile der Ansicht angezeigt werden.
QSqlQueryModel kann auch verwendet werden, um programmatisch 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 Codeschnipsel extrahiert das Feld salary
aus Datensatz 4 in der Ergebnismenge der Abfrage SELECT
. Da salary
die 2. Spalte (oder 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 schreibgeschützt zu machen, müssen Sie es unterklassifizieren und setData() und flags() neu implementieren. Eine andere Möglichkeit ist die Verwendung von QSqlTableModel, die ein Schreib-Lese-Modell auf der Grundlage einer einzigen Datenbanktabelle bereitstellt.
Das querymodel Beispiel zeigt, wie man QSqlQueryModel verwendet, um das Ergebnis einer Abfrage anzuzeigen. Es zeigt auch, wie man die Unterklasse QSqlQueryModel verwendet, um den Inhalt der Daten anzupassen, bevor sie dem Benutzer angezeigt werden, und wie man ein Lese- und Schreibmodell auf der Grundlage von QSqlQueryModel erstellt.
Wenn die Datenbank nicht die Anzahl der ausgewählten Zeilen in einer Abfrage zurückgibt, holt das Modell die Zeilen inkrementell. Siehe fetchMore() für weitere Informationen.
Siehe auch QSqlTableModel, QSqlRelationalTableModel, QSqlQuery, Model/View Programming, und Query Model Example.
Dokumentation der Mitgliedsfunktionen
[explicit]
QSqlQueryModel::QSqlQueryModel(QObject *parent = nullptr)
Erzeugt ein leeres QSqlQueryModel mit der angegebenen parent.
[virtual noexcept]
QSqlQueryModel::~QSqlQueryModel()
Zerstört das Objekt und gibt alle zugewiesenen Ressourcen frei.
Siehe auch clear().
[override virtual]
bool QSqlQueryModel::canFetchMore(const QModelIndex &parent = QModelIndex()) const
Reimplements: QAbstractItemModel::canFetchMore(const QModelIndex &parent) const.
Gibt true
zurück, wenn es möglich ist, weitere Zeilen aus der Datenbank zu lesen. Dies betrifft nur Datenbanken, die die Größe einer Abfrage nicht zurückmelden (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 erworbenen Ressourcen frei.
[override virtual]
int QSqlQueryModel::columnCount(const QModelIndex &index = QModelIndex()) const
Reimplements: QAbstractItemModel::columnCount(const QModelIndex &parent) const.
[override virtual]
QVariant QSqlQueryModel::data(const QModelIndex &item, int role = Qt::DisplayRole) const
Reimplements: QAbstractItemModel::data(const QModelIndex &index, int role) const.
Gibt den Wert für die angegebenen item und role zurück.
Wenn item außerhalb der Grenzen liegt oder ein Fehler auftritt, wird ein ungültiger QVariant zurückgegeben.
Siehe auch lastError().
[override virtual]
void QSqlQueryModel::fetchMore(const QModelIndex &parent = QModelIndex())
Reimplements: QAbstractItemModel::fetchMore(const QModelIndex &parent).
Holt mehr Zeilen aus einer Datenbank. Dies betrifft nur Datenbanken, die die Größe einer Abfrage nicht zurückmelden (siehe QSqlDriver::hasFeature()).
Um das Abrufen der gesamten Ergebnismenge zu erzwingen, können Sie Folgendes verwenden:
while (myModel->canFetchMore()) myModel->fetchMore();
parent sollte immer eine ungültige QModelIndex sein.
Siehe auch canFetchMore().
[override virtual]
QVariant QSqlQueryModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const
Reimplements: QAbstractItemModel::headerData(int section, Qt::Orientation orientation, int role) const.
Liefert die Kopfdaten für das angegebene role in der section des Headers mit dem angegebenen orientation.
Siehe auch setHeaderData().
[virtual protected]
QModelIndex QSqlQueryModel::indexInQuery(const QModelIndex &item) const
Gibt den Index des Wertes in der Datenbankergebnismenge für die angegebene item im Modell zurück.
Der Rückgabewert ist identisch mit item, wenn keine Spalten oder Zeilen eingefügt, entfernt oder verschoben wurden.
Gibt einen ungültigen Modellindex zurück, wenn item außerhalb der Grenzen liegt oder wenn item nicht auf einen Wert in der Ergebnismenge zeigt.
Siehe auch QSqlTableModel::indexInQuery(), insertColumns(), und removeColumns().
[override virtual]
bool QSqlQueryModel::insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())
Reimplements: QAbstractItemModel::insertColumns(int column, int count, const QModelIndex &parent).
Fügt count Spalten 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 Grenzen liegt; andernfalls wird false
zurückgegeben.
Standardmäßig sind die eingefügten Spalten leer. Um sie mit Daten zu füllen, reimplementieren Sie data() und behandeln 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
Liefert Informationen über den letzten Fehler, der in der Datenbank aufgetreten ist.
Siehe auch setLastError() und query().
const QSqlQuery &QSqlQueryModel::query() const
Gibt einen Verweis auf das mit diesem Modell verbundene Objekt const QSqlQuery zurück.
Siehe auch setQuery().
[virtual protected]
void QSqlQueryModel::queryChange()
Diese virtuelle Funktion wird immer dann aufgerufen, wenn sich die Abfrage ändert. Die Standardimplementierung tut nichts.
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 über die Felder der aktuellen Abfrage enthält. Wenn row der Index einer gültigen Zeile ist, wird der Datensatz mit Werten aus dieser Zeile gefüllt.
Wenn das Modell nicht initialisiert ist, wird ein leerer Datensatz zurückgegeben.
Siehe auch QSqlRecord::isEmpty().
QSqlRecord QSqlQueryModel::record() const
Dies ist eine überladene Funktion.
Gibt einen leeren Datensatz zurück, der Informationen über die Felder der aktuellen Abfrage enthält.
Wenn das Modell nicht initialisiert ist, wird ein leerer Datensatz zurückgegeben.
Siehe auch QSqlRecord::isEmpty().
[override virtual]
bool QSqlQueryModel::removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())
Reimplements: QAbstractItemModel::removeColumns(int column, int count, const QModelIndex &parent).
Entfernt count Spalten aus dem Modell ab 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 blendet diese effektiv aus. Die zugrunde liegende QSqlQuery bleibt davon unberührt.
Gibt true
zurück, wenn die Spalten entfernt wurden; andernfalls wird false
zurückgegeben.
[override virtual]
QHash<int, QByteArray> QSqlQueryModel::roleNames() const
Reimplements: QAbstractItemModel::roleNames() const.
Gibt die Rollennamen des Modells zurück.
Qt definiert nur eine Rolle für die QSqlQueryModel:
Qt-Rolle | QML-Rollen-Name |
---|---|
Qt::DisplayRole | anzeigen |
[override virtual]
int QSqlQueryModel::rowCount(const QModelIndex &parent = QModelIndex()) const
Reimplements: 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 aktuell auf dem Client zwischengespeicherten Zeilen zurückgegeben.
parent sollte immer ein ungültiges 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)
Reimplements: QAbstractItemModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role).
Setzt die Beschriftung für eine horizontale Kopfzeile für die 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 sich section auf einen gültigen Abschnitt bezieht; andernfalls wird false zurückgegeben.
Beachten Sie, dass diese Funktion nicht verwendet werden kann, um Werte in der Datenbank zu ändern, da das Modell schreibgeschützt ist.
Siehe auch headerData() und data().
[protected]
void QSqlQueryModel::setLastError(const QSqlError &error)
Geschützte Funktion, die es abgeleiteten Klassen ermöglicht, den Wert des letzten Fehlers, der in der Datenbank aufgetreten ist, auf error zu setzen.
Siehe auch lastError().
[since 6.2]
void QSqlQueryModel::setQuery(QSqlQuery &&query)
Setzt das Modell zurück und setzt den Datenanbieter auf den angegebenen query. Beachten Sie, dass die Abfrage aktiv sein muss und nicht isForwardOnly() sein darf.
lastError() kann verwendet werden, um ausführliche Informationen abzurufen, wenn ein Fehler beim Setzen der Abfrage aufgetreten ist.
Hinweis: Der Aufruf von setQuery() entfernt alle eingefügten Spalten.
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())
Dies ist eine überladene Funktion.
Führt die Abfrage query für die angegebene Datenbankverbindung db aus. Wenn keine Datenbank (oder eine ungültige Datenbank) angegeben wird, wird die Standardverbindung verwendet.
lastError() kann verwendet werden, um ausführliche Informationen abzurufen, wenn beim Setzen der Abfrage ein Fehler aufgetreten ist.
Beispiel:
QSqlQueryModel model; model.setQuery("select * from MyTable");if (model.lastError().isValid()) qDebug() << model.lastError();
Siehe auch query(), queryChange(), und lastError().
© 2025 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.