Auf dieser Seite

Verwendung von SQL-Datenbanken mit „ Qt Quick “-Ansichten

SQL-Modelle

Qt stellt C++-Klassen bereit, die SQL-Datenmodelle unterstützen. Diese Klassen arbeiten transparent mit den zugrunde liegenden SQL-Daten und reduzieren so die Notwendigkeit, SQL-Abfragen für grundlegende SQL-Operationen wie „create“, „insert“ oder „update“ auszuführen. Weitere Informationen zu diesen Klassen finden Sie unter „Verwendung der SQL-Modellklassen“.

Obwohl die C++-Klassen einen vollständigen Funktionsumfang für die Bearbeitung von SQL-Daten bieten, stellen sie keinen Datenzugriff für QML bereit. Daher müssen Sie ein benutzerdefiniertes C++-Datenmodell als Unterklasse einer dieser Klassen implementieren und es QML entweder als Typ oder als Kontexteigenschaft zur Verfügung stellen.

Schreibgeschütztes Datenmodell

Das benutzerdefinierte Modell muss die folgenden Methoden neu implementieren, um den schreibgeschützten Zugriff auf die Daten aus QML zu ermöglichen:

  • roleNames() um die Rollennamen für das QML-Frontend verfügbar zu machen. Die folgende Version gibt beispielsweise die Feldnamen der ausgewählten Tabelle als Rollennamen zurück:
     QHash<int, QByteArray> SqlQueryModel::roleNames() const
     {
        QHash<int, QByteArray> roles;
        // record() returns an empty QSqlRecord
        for (int i = 0; i < this->record().count(); i ++) {
            roles.insert(Qt::UserRole + i + 1, record().fieldName(i).toUtf8());
        }
        return roles;
    }
  • data() um SQL-Daten für das QML-Frontend bereitzustellen. Die folgende Implementierung gibt beispielsweise Daten für den angegebenen Modellindex zurück:
    QVariant SqlQueryModel::data(const QModelIndex &index, int role) const
    {
        QVariant value;
    
        if (index.isValid()) {
            if (role < Qt::UserRole) {
                value = QSqlQueryModel::data(index, role);
            } else {
                int columnIdx = role - Qt::UserRole - 1;
                QModelIndex modelIndex = this->index(index.row(), columnIdx);
                value = QSqlQueryModel::data(modelIndex, Qt::DisplayRole);
            }
        }
        return value;
    }

Die Klasse „ QSqlQueryModel “ eignet sich gut zur Implementierung eines benutzerdefinierten schreibgeschützten Modells, das Daten in einer SQL-Datenbank darstellt. Das Beispiel im Chat-Tutorial veranschaulicht dies sehr gut, indem es ein benutzerdefiniertes Modell implementiert, um die Kontaktdaten aus einer SQLite-Datenbank abzurufen.

Bearbeitbares Datenmodell

QSqlTableModel bietet ein bearbeitbares Datenmodell für eine einzelne Datenbanktabelle und implementiert `setData()`, wie in der Dokumentation zur Modell-Ansicht-Programmierung beschrieben.

Je nach dem vom Modell verwendeten ` EditStrategy ` werden die Änderungen entweder zur späteren Übermittlung in eine Warteschlange gestellt oder sofort übermittelt.

Sie können auch neue Daten in das Modell einfügen, indem Sie ` QSqlTableModel::insertRecord()` aufrufen. Im folgenden Beispielausschnitt wird ein ` QSqlRecord ` mit Buchdetails gefüllt und an das Modell angehängt:

...
QSqlRecord newRecord = record();
newRecord.setValue("author", "John Grisham");
newRecord.setValue("booktitle", "The Litigators");
insertRecord(rowCount(), newRecord);
...

© 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.