Sur cette page

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 :

QSqlTableModel

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 QtNom du rôle QML
Qt::DisplayRoledisplay

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