Utilisation de bases de données SQL avec les vues d'Qt Quick
Modèles SQL
Qt fournit des classes C++ prenant 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 des opérations SQL de base telles que la création, l’insertion ou la mise à jour. Pour plus de détails sur ces classes, consultez la section Utilisation des classes de modèles SQL.
Bien que les classes C++ offrent un ensemble complet de fonctionnalités pour manipuler les données SQL, elles ne fournissent pas d’accès aux données depuis QML. Vous devez donc implémenter un modèle de données C++ personnalisé en tant que sous-classe de l’une de ces classes, puis l’exposer à QML sous forme de type ou de 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 un accès en lecture seule aux données depuis QML :
- roleNames() pour exposer les noms de rôles à l’interface 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 correspondant à 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 suffisante pour implémenter un modèle personnalisé en lecture seule représentant les données d’une base de données SQL. L’exemple du tutoriel sur le chat l’illustre très bien en implémentant un modèle personnalisé pour récupérer les coordonnées d’un contact à partir 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 la méthode setData() comme décrit dans la documentation de présentation de la programmation modèle/vue.
Selon l’ EditStrategy utilisé par le modèle, les modifications sont soit mises en file d’attente pour être validées ultérieurement, soit validées immédiatement.
Vous pouvez également insérer de nouvelles données dans le modèle en appelant la méthode ` QSqlTableModel::insertRecord()`. Dans l’extrait de code suivant, un objet ` QSqlRecord ` est renseigné avec les détails d’un livre, puis ajouté 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.