Utilisation de bases de données SQL avec Qt Quick Views
Modèles SQL
Qt fournit des classes C++ qui prennent en charge les modèles de données SQL. Ces classes fonctionnent de manière transparente sur les données SQL sous-jacentes, ce qui réduit la nécessité d'exécuter des requêtes SQL pour les opérations SQL de base telles que la création, l'insertion ou la mise à jour. Pour plus de détails sur ces classes, voir Utilisation des classes de modèle SQL.
Bien que les classes C++ fournissent des ensembles complets de fonctionnalités permettant d'opérer sur des données SQL, elles ne fournissent pas d'accès aux données à QML. Vous devez donc mettre en œuvre un modèle de données personnalisé C++ en tant que sous-classe de l'une de ces classes et l'exposer à QML sous la forme d'un type ou d'une propriété de contexte.
Modèle de données en lecture seule
Le modèle personnalisé doit réimplémenter les méthodes suivantes pour permettre l'accès en lecture seule aux données à partir de QML :
- roleNames() pour exposer les noms de rôle au frontend QML. Par exemple, la version suivante renvoie les noms des champs de la table sélectionnée en tant que noms de rôles :
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() pour exposer les données SQL au frontal QML. Par exemple, l'implémentation suivante renvoie les données pour l'index de modèle donné :
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; }
La classe QSqlQueryModel est suffisamment performante pour mettre en œuvre un modèle personnalisé en lecture seule qui représente les données d'une base de données SQL. L'exemple du tutoriel sur le chat le démontre très bien en mettant en œuvre un modèle personnalisé pour récupérer les coordonnées d'une base de données SQLite.
Modèle de données modifiable
QSqlTableModel fournit un modèle de données modifiable pour une seule table de base de données et implémente setData() comme décrit dans la documentation générale sur la programmation modèle/vue.
En fonction de l'adresse EditStrategy utilisée par le modèle, les modifications sont soit mises en file d'attente pour être soumises ultérieurement, soit soumises immédiatement.
Vous pouvez également insérer de nouvelles données dans le modèle en appelant QSqlTableModel::insertRecord(). Dans l'exemple suivant, une page QSqlRecord est remplie avec les détails d'un livre et ajoutée au modèle :
... 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.