QSqlQueryModel Class
La classe QSqlQueryModel fournit un modèle de données en lecture seule pour les ensembles de résultats SQL. En savoir plus...
| En-tête : | #include <QSqlQueryModel> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Sql) target_link_libraries(mytarget PRIVATE Qt6::Sql) |
| qmake : | QT += sql |
| Hérite de : | QAbstractTableModel |
| Hérite de : |
- Liste de tous les membres, y compris les membres hérités
- Membres obsolètes
- QSqlQueryModel fait partie des classes de base de données.
Fonctions publiques
| 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()) |
Fonctions publiques réimplémentées
| 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 |
Fonctions protégées
| virtual QModelIndex | indexInQuery(const QModelIndex &item) const |
| virtual void | queryChange() |
| void | setLastError(const QSqlError &error) |
Description détaillée
QSqlQueryModel est une interface de haut niveau permettant d'exécuter des instructions SQL et de parcourir le jeu de résultats. Elle s'appuie sur la classe de niveau inférieur QSqlQuery et peut être utilisée pour fournir des données à des classes de vue telles que QTableView. Par exemple :
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();Nous définissons la requête du modèle, puis nous configurons les libellés affichés dans l'en-tête de la vue.
QSqlQueryModel peut également être utilisé pour accéder à une base de données par programmation, sans la lier à une vue :
QSqlQueryModel model;
model.setQuery("SELECT name, salary FROM employee");
int salary = model.record(4).value("salary").toInt();L'extrait de code ci-dessus extrait le champ « salary » de l'enregistrement n° 4 dans le jeu de résultats de la requête « SELECT ». Étant donné que « salary » est la 2e colonne (ou l'index de colonne 1), nous pouvons réécrire la dernière ligne comme suit :
int salary = model.data(model.index(4, 1)).toInt();Le modèle est en lecture seule par défaut. Pour le rendre accessible en lecture-écriture, vous devez créer une sous-classe et réimplémenter les méthodes setData() et flags(). Une autre option consiste à utiliser QSqlTableModel, qui fournit un modèle en lecture-écriture basé sur une seule table de base de données.
L’exemple `querymodel ` illustre comment utiliser `QSqlQueryModel` pour afficher le résultat d’une requête. Il montre également comment créer une sous-classe de `QSqlQueryModel` afin de personnaliser le contenu des données avant de les afficher à l’utilisateur, et comment créer un modèle en lecture-écriture basé sur `QSqlQueryModel`.
Si la base de données ne renvoie pas le nombre de lignes sélectionnées dans une requête, le modèle récupérera les lignes de manière incrémentielle. Voir fetchMore() pour plus d’informations.
Voir également QSqlTableModel, QSqlRelationalTableModel, QSqlQuery, Programmation modèle/vue et Exemple de modèle de requête.
Documentation sur les fonctions membres
[explicit] QSqlQueryModel::QSqlQueryModel(QObject *parent = nullptr)
Crée un objet QSqlQueryModel vide avec l'parent on fournie.
[virtual noexcept] QSqlQueryModel::~QSqlQueryModel()
Détruit l'objet et libère toutes les ressources allouées.
Voir aussi clear().
[override virtual] bool QSqlQueryModel::canFetchMore(const QModelIndex &parent = QModelIndex()) const
Réimplémente : QAbstractItemModel::canFetchMore(const QModelIndex &parent) const.
Renvoie true s'il est possible de lire davantage de lignes depuis la base de données. Cela ne concerne que les bases de données qui ne renvoient pas la taille d'une requête (voir QSqlDriver::hasFeature()).
parent doit toujours être un ` QModelIndex` non valide.
Voir également fetchMore().
[virtual] void QSqlQueryModel::clear()
Efface le modèle et libère toutes les ressources utilisées.
[override virtual] int QSqlQueryModel::columnCount(const QModelIndex &index = QModelIndex()) const
Réimplémente : QAbstractItemModel::columnCount(const QModelIndex &parent) const.
[override virtual] QVariant QSqlQueryModel::data(const QModelIndex &item, int role = Qt::DisplayRole) const
Réimplémente : ` QAbstractItemModel::data(const QModelIndex &index, int role) const`.
Renvoie la valeur correspondant à l'item et à l'role spécifiés.
Si item est hors limites ou si une erreur s'est produite, une valeur QVariant non valide est renvoyée.
Voir aussi lastError().
[override virtual] void QSqlQueryModel::fetchMore(const QModelIndex &parent = QModelIndex())
Réimplémente : QAbstractItemModel::fetchMore(const QModelIndex &parent).
Récupère davantage de lignes depuis une base de données. Cela ne concerne que les bases de données qui ne renvoient pas la taille d'une requête (voir QSqlDriver::hasFeature()).
Pour forcer la récupération de l'ensemble des résultats, vous pouvez utiliser ce qui suit :
while (myModel->canFetchMore())
myModel->fetchMore();parent doit toujours être un ` QModelIndex` non valide.
Voir également canFetchMore().
[override virtual] QVariant QSqlQueryModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const
Réimplémentation de : QAbstractItemModel::headerData(int section, Qt::Orientation orientation, int role) const.
Renvoie les données d'en-tête correspondant à l'role donné, dans l'section de l'en-tête avec l'orientation spécifié.
Voir également setHeaderData().
[virtual protected] QModelIndex QSqlQueryModel::indexInQuery(const QModelIndex &item) const
Renvoie l'index de la valeur dans le jeu de résultats de la base de données correspondant à l'item donné dans le modèle.
La valeur renvoyée est identique à ` item ` si aucune colonne ni ligne n'a été insérée, supprimée ou déplacée.
Renvoie un index de modèle non valide si ` item ` est hors limites ou si ` item ` ne pointe pas vers une valeur du jeu de résultats.
Voir également QSqlTableModel::indexInQuery(), insertColumns() et removeColumns().
[override virtual] bool QSqlQueryModel::insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())
Réimplémente : QAbstractItemModel::insertColumns(int column, int count, const QModelIndex &parent).
Insère count colonnes dans le modèle à la position column. Le paramètre parent doit toujours être un QModelIndex non valide, car le modèle ne prend pas en charge les relations parent-enfant.
Renvoie ` true ` si ` column ` est dans les limites ; sinon, renvoie ` false`.
Par défaut, les colonnes insérées sont vides. Pour les remplir avec des données, réimplémentez data() et traitez chaque colonne insérée séparément :
QVariant MyModel::data(const QModelIndex &item, int role) const
{
if (item.column() == m_specialColumnNo) {
// handle column separately
}
return QSqlQueryModel::data(item, role);
}Voir également removeColumns().
QSqlError QSqlQueryModel::lastError() const
Renvoie des informations sur la dernière erreur survenue dans la base de données.
Voir également setLastError() et query().
const QSqlQuery &QSqlQueryModel::query() const
Renvoie une référence à l'objet ` QSqlQuery ` de type `const` associé à ce modèle.
Voir aussi setQuery().
[virtual protected] void QSqlQueryModel::queryChange()
Cette fonction virtuelle est appelée chaque fois que la requête change. L'implémentation par défaut ne fait rien.
query() renvoie la nouvelle requête.
Voir également query() et setQuery().
QSqlRecord QSqlQueryModel::record(int row) const
Renvoie l'enregistrement contenant des informations sur les champs de la requête en cours. Si ` row ` correspond à l'index d'une ligne valide, l'enregistrement sera renseigné avec les valeurs de cette ligne.
Si le modèle n'est pas initialisé, un enregistrement vide sera renvoyé.
Voir aussi QSqlRecord::isEmpty().
QSqlRecord QSqlQueryModel::record() const
Renvoie un enregistrement vide contenant des informations sur les champs de la requête en cours.
Si le modèle n'est pas initialisé, un enregistrement vide sera renvoyé.
Il s'agit d'une fonction surchargée.
Voir également QSqlRecord::isEmpty().
[since 6.9] void QSqlQueryModel::refresh()
Réexécute la requête en cours pour récupérer les données à partir de la même connexion à la base de données.
Remarque : la fonction « refresh() » ne s'applique pas lorsque la requête contient des valeurs liées.
Cette fonction a été introduite dans Qt 6.9.
Voir également ` setQuery` (QSqlQuery &&query) et ` QSqlQuery::boundValue()`.
[override virtual] bool QSqlQueryModel::removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())
Réimplémentation de : QAbstractItemModel::removeColumns(int column, int count, const QModelIndex &parent).
Supprime les colonnes count du modèle à partir de la position column. Le paramètre parent doit toujours être un QModelIndex non valide, car le modèle ne prend pas en charge les relations parent-enfant.
La suppression des colonnes les masque effectivement. Elle n’affecte pas l’ QSqlQuery sous-jacente.
Renvoie « true » si les colonnes ont été supprimées ; sinon, renvoie « false ».
[override virtual] QHash<int, QByteArray> QSqlQueryModel::roleNames() const
Réimplémente : QAbstractItemModel::roleNames() const.
Renvoie les noms des rôles du modèle.
Qt ne définit qu'un seul rôle pour l'QSqlQueryModel:
| Rôle Qt | Nom du rôle QML |
|---|---|
| Qt::DisplayRole | display |
[override virtual] int QSqlQueryModel::rowCount(const QModelIndex &parent = QModelIndex()) const
Réimplémente : QAbstractItemModel::rowCount(const QModelIndex &parent) const.
Si la base de données prend en charge le renvoi de la taille d'une requête (voir QSqlDriver::hasFeature()), le nombre de lignes de la requête en cours est renvoyé. Sinon, renvoie le nombre de lignes actuellement mises en cache sur le client.
parent Doit toujours être un appel invalide à ` QModelIndex`.
Voir également canFetchMore() et QSqlDriver::hasFeature().
[override virtual] bool QSqlQueryModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole)
Réimplémente : QAbstractItemModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role).
Définit la légende d’un en-tête horizontal pour l’ role spécifié sur value. Cette fonction est utile si le modèle est utilisé pour afficher des données dans une vue (par exemple, QTableView).
Renvoie true si orientation est Qt::Horizontal et si section fait référence à une section valide ; sinon, renvoie false.
Notez que cette fonction ne peut pas être utilisée pour modifier des valeurs dans la base de données, car le modèle est en lecture seule.
Voir également headerData() et data().
[protected] void QSqlQueryModel::setLastError(const QSqlError &error)
Fonction protégée permettant aux classes dérivées de définir la valeur de la dernière erreur survenue dans la base de données à error.
Voir également lastError().
[since 6.2] void QSqlQueryModel::setQuery(QSqlQuery &&query)
Réinitialise le modèle et définit le fournisseur de données sur l'adresse query fournie. Notez que la requête doit être active et ne doit pas être de type isForwardOnly().
lastErrorLa méthode () peut être utilisée pour récupérer des informations détaillées en cas d’erreur lors de la configuration de la requête.
Remarque : l'appel de setQuery() supprimera toutes les colonnes insérées.
Cette fonction a été introduite dans Qt 6.2.
Voir également query(), QSqlQuery::isActive(), QSqlQuery::setForwardOnly() et lastError().
void QSqlQueryModel::setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase())
Exécute la requête query pour la connexion à la base de données indiquée db. Si aucune base de données n'est spécifiée (ou si celle-ci est invalide), la connexion par défaut est utilisée.
lastErrorLa fonction () permet d'obtenir des informations détaillées en cas d'erreur lors de la configuration de la requête.
Exemple :
QSqlQueryModel model;
model.setQuery("select * from MyTable");
if (model.lastError().isValid())
qDebug() << model.lastError();Il s'agit d'une fonction surchargée.
Voir également query(), queryChange() et 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.