QAbstractTableModel Class
La classe `QAbstractTableModel` fournit un modèle abstrait pouvant être sous-classé pour créer des modèles de tableaux. En savoir plus...
| En-tête : | #include <QAbstractTableModel> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
| Hérite de : | QAbstractItemModel |
| Hérité par : |
Fonctions publiques
| QAbstractTableModel(QObject *parent = nullptr) | |
| virtual | ~QAbstractTableModel() |
Fonctions publiques réimplémentées
| virtual bool | dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override |
| virtual Qt::ItemFlags | flags(const QModelIndex &index) const override |
| virtual QModelIndex | index(int row, int column, const QModelIndex &parent = QModelIndex()) const override |
| virtual QModelIndex | sibling(int row, int column, const QModelIndex &idx) const override |
Description détaillée
QAbstractTableModel fournit une interface standard pour les modèles qui représentent leurs données sous la forme d'un tableau bidimensionnel d'éléments. Il n'est pas utilisé directement, mais doit être sous-classé.
Comme ce modèle fournit une interface plus spécialisée que QAbstractItemModel, il n’est pas adapté à une utilisation avec des arborescences, bien qu’il puisse servir à fournir des données à un QListView. Si vous devez représenter une simple liste d’éléments et que vous n’avez besoin d’un modèle contenant qu’une seule colonne de données, il peut être plus approprié de créer une sous-classe de QAbstractListModel.
Les fonctions ` rowCount()` et ` columnCount()` renvoient les dimensions de la table. Pour récupérer un index de modèle correspondant à un élément du modèle, utilisez ` index()` et indiquez uniquement les numéros de ligne et de colonne.
Sous-classement
Lorsque vous créez une sous-classe de `QAbstractTableModel`, vous devez implémenter les méthodes ` rowCount()`, ` columnCount()` et ` data()`. Des implémentations par défaut des méthodes ` index()` et ` parent()` sont fournies par `QAbstractTableModel`. Les modèles bien conçus implémenteront également la méthode ` headerData()`.
Les modèles modifiables doivent implémenter setData() et flags() afin de renvoyer une valeur contenant Qt::ItemIsEditable.
Les modèles fournissant des interfaces vers des structures de données redimensionnables peuvent proposer des implémentations de insertRows(), removeRows(), insertColumns() et removeColumns(). Lors de l’implémentation de ces fonctions, il est important d’appeler les fonctions appropriées afin que toutes les vues connectées soient informées de tout changement :
- Une implémentation de insertRows() doit appeler beginInsertRows() avant d’insérer de nouvelles lignes dans la structure de données, puis appeler endInsertRows() immédiatement après.
- Une implémentation de ` insertColumns()` doit appeler ` beginInsertColumns()` avant d’insérer de nouvelles colonnes dans la structure de données, puis appeler ` endInsertColumns()` immédiatement après.
- Une implémentation de ` removeRows()` doit appeler ` beginRemoveRows()` avant que les lignes ne soient supprimées de la structure de données, puis appeler ` endRemoveRows()` immédiatement après.
- Une implémentation de ` removeColumns()` doit appeler ` beginRemoveColumns()` avant que les colonnes ne soient supprimées de la structure de données, puis appeler ` endRemoveColumns()` immédiatement après.
Remarque : certaines directives générales concernant la sous-classification des modèles sont disponibles dans la référence sur la sous-classification des modèles.
Sécurité des threads
En tant que sous-classe de QObject, QAbstractTableModel n'est pas thread-safe. Toute API liée au modèle QAbstractTableModel ne doit être appelée qu'à partir du thread dans lequel réside l'objet modèle. Si QAbstractTableModel est connecté à une vue, il s'exécute sur le thread de l'interface graphique, car la vue y réside et interagit avec le modèle à partir de ce thread. Bien qu’un thread d’arrière-plan puisse être utilisé pour remplir ou modifier le contenu du modèle, il doit le faire avec précaution, car il ne peut appeler directement aucune API liée au modèle. Vous devez plutôt mettre les mises à jour en file d’attente et les appliquer dans le thread principal. Cela peut être réalisé à l’aide de connexions mises en file d’attente.
Voir également Classes de modèles, QAbstractItemModel, QAbstractListModel et QRangeModel.
Documentation sur les fonctions membres
[explicit] QAbstractTableModel::QAbstractTableModel(QObject *parent = nullptr)
Crée un modèle de table abstrait pour l'parent.
[virtual noexcept] QAbstractTableModel::~QAbstractTableModel()
Supprime le modèle de table abstrait.
[override virtual] bool QAbstractTableModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
Réimplémentation de : QAbstractItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent).
[override virtual] Qt::ItemFlags QAbstractTableModel::flags(const QModelIndex &index) const
Réimplémente : ` QAbstractItemModel::flags(const QModelIndex &index) const`.
[override virtual] QModelIndex QAbstractTableModel::index(int row, int column, const QModelIndex &parent = QModelIndex()) const
Réimplémentation de : QAbstractItemModel::index(int row, int column, const QModelIndex &parent) const.
Renvoie l'index des données dans row et column avec parent.
Voir aussi parent().
[override virtual] QModelIndex QAbstractTableModel::sibling(int row, int column, const QModelIndex &idx) const
Réimplémente : QAbstractItemModel::sibling(int row, int column, const QModelIndex &index) const.
© 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.