QItemDelegate Class
La classe `QItemDelegate` offre des fonctionnalités d'affichage et de modification des éléments de données provenant d'un modèle. En savoir plus...
| En-tête : | #include <QItemDelegate> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake : | QT += widgets |
| Hérite de : | QAbstractItemDelegate |
Propriétés
- clipping : bool
Fonctions publiques
| QItemDelegate(QObject *parent = nullptr) | |
| virtual | ~QItemDelegate() |
| bool | hasClipping() const |
| QItemEditorFactory * | itemEditorFactory() const |
| void | setClipping(bool clip) |
| void | setItemEditorFactory(QItemEditorFactory *factory) |
Fonctions publiques réimplémentées
| virtual QWidget * | createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override |
| virtual void | paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override |
| virtual void | setEditorData(QWidget *editor, const QModelIndex &index) const override |
| virtual void | setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override |
| virtual QSize | sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override |
| virtual void | updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const override |
Fonctions protégées
| void | drawBackground(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const |
| virtual void | drawCheck(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, Qt::CheckState state) const |
| virtual void | drawDecoration(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QPixmap &pixmap) const |
| virtual void | drawDisplay(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QString &text) const |
| virtual void | drawFocus(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect) const |
Fonctions protégées réimplémentées
| virtual bool | editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override |
| virtual bool | eventFilter(QObject *object, QEvent *event) override |
Description détaillée
QItemDelegate permet de fournir des fonctionnalités d'affichage personnalisées et des widgets d'édition pour les vues d'éléments basées sur des sous-classes de QAbstractItemView. L'utilisation d'un délégué à cette fin permet de personnaliser et de développer les mécanismes d'affichage et d'édition indépendamment du modèle et de la vue.
La classe QItemDelegate fait partie des classes Modèle/Vue et s'inscrit dans le cadre du modèle/vue de Qt. Notez que la classe ` QStyledItemDelegate ` a pris le relais pour le dessin des vues d'éléments de Qt. Nous recommandons l'utilisation de ` QStyledItemDelegate ` lors de la création de nouveaux délégués.
Lors de l’affichage d’éléments provenant d’un modèle personnalisé dans une vue standard, il suffit souvent de s’assurer que le modèle renvoie les données appropriées pour chacun des roles qui déterminent l’apparence des éléments dans les vues. Le délégué par défaut utilisé par les vues standard de Qt utilise ces informations de rôle pour afficher les éléments sous la plupart des formes courantes attendues par les utilisateurs. Cependant, il est parfois nécessaire d’avoir encore plus de contrôle sur l’apparence des éléments que ne le permet le délégué par défaut.
Cette classe fournit des implémentations par défaut des fonctions permettant de dessiner les données des éléments dans une vue et de modifier les données issues des modèles d’éléments. Des implémentations par défaut des fonctions virtuelles ` paint()` et ` sizeHint()`, définies dans ` QAbstractItemDelegate`, sont fournies pour garantir que le délégué implémente le comportement de base correct attendu par les vues. Vous pouvez réimplémenter ces fonctions dans des sous-classes afin de personnaliser l’apparence des éléments.
Lors de la modification de données dans une vue d’élément, QItemDelegate fournit un widget d’édition, qui est un widget placé par-dessus la vue pendant la modification. Les éditeurs sont créés à l’aide d’un QItemEditorFactory; une instance statique par défaut fournie par QItemEditorFactory est installée sur tous les délégués d’élément. Vous pouvez définir une fabrique personnalisée à l’aide de setItemEditorFactory() ou définir une nouvelle fabrique par défaut avec QItemEditorFactory::setDefaultFactory(). Ce sont les données stockées dans le modèle d’élément via l’ Qt::EditRole qui sont modifiées.
Seules les fonctions d’édition standard pour les délégués basés sur des widgets sont réimplémentées ici :
- createEditor() renvoie le widget utilisé pour modifier les données du modèle et peut être réimplémenté pour personnaliser le comportement d’édition.
- setEditorData() fournit au widget les données à manipuler.
- updateEditorGeometry() garantit que l’éditeur s’affiche correctement par rapport à la vue de l’élément.
- setModelData() renvoie les données mises à jour au modèle.
Le signal closeEditor() indique que l'utilisateur a terminé la modification des données et que le widget d'édition peut être détruit.
Rôles et types de données standard
Le délégué par défaut utilisé par les vues standard fournies avec Qt associe chaque rôle standard (défini par Qt::ItemDataRole) à certains types de données. Les modèles qui renvoient des données de ces types peuvent influencer l'apparence du délégué, comme décrit dans le tableau suivant.
| Rôle | Types acceptés |
|---|---|
| Qt::BackgroundRole | QBrush |
| Qt::CheckStateRole | Qt::CheckState |
| Qt::DecorationRole | QIcon, QPixmap et QColor |
| Qt::DisplayRole | QString et les types ayant une représentation sous forme de chaîne de caractères |
| Qt::EditRole | Voir QItemEditorFactory pour plus de détails |
| Qt::FontRole | QFont |
| Qt::SizeHintRole | QSize |
| Qt::TextAlignmentRole | Qt::Alignment |
| Qt::ForegroundRole | QBrush |
Si le délégué par défaut ne permet pas le niveau de personnalisation dont vous avez besoin, que ce soit pour l'affichage ou pour la modification des données, il est possible de créer une sous-classe de QItemDelegate afin d'implémenter le comportement souhaité.
Sous-classement
Lorsque vous créez une sous-classe de QItemDelegate pour créer un délégué qui affiche les éléments à l’aide d’un moteur de rendu personnalisé, il est important de s’assurer que le délégué peut rendre les éléments de manière appropriée pour tous les états requis, tels que « sélectionné », « désactivé » ou « coché ». La documentation de la fonction paint() contient quelques conseils pour vous montrer comment y parvenir.
Vous pouvez fournir des éditeurs personnalisés à l’aide de ` QItemEditorFactory`. Le code suivant montre comment un éditeur personnalisé peut être mis à la disposition des délégués grâce à l’usine d’éditeurs d’éléments par défaut.
QItemEditorFactory *editorFactory = new QItemEditorFactory;
QItemEditorCreatorBase *creator = new QStandardItemEditorCreator<MyFancyDateTimeEdit>();
editorFactory->registerEditor(QMetaType::QDateTime, creator);
QItemEditorFactory::setDefaultFactory(editorFactory);Une fois l’usine par défaut définie, tous les délégués d’élément standard l’utiliseront (y compris ceux créés avant la définition de l’usine par défaut).
De cette manière, vous pouvez éviter de sous-classer QItemDelegate, et toutes les valeurs du type spécifié (par exemple QMetaType::QDateTime) seront modifiées à l’aide de l’éditeur fourni (comme MyFancyDateTimeEdit dans l’exemple ci-dessus).
Une alternative consiste à réimplémenter createEditor(), setEditorData(), setModelData() et updateEditorGeometry(). Ce processus est décrit dans la documentation générale sur la programmation Modèle/Vue.
QStyledItemDelegate vs. QItemDelegate
Depuis Qt 4.4, il existe deux classes de délégués : QItemDelegate et QStyledItemDelegate. Cependant, le délégué par défaut est QStyledItemDelegate. Ces deux classes constituent des alternatives indépendantes pour le dessin et la fourniture d’éditeurs aux éléments des vues. La différence entre elles réside dans le fait qu’ QStyledItemDelegate utilise le style actuel pour dessiner ses éléments. Nous recommandons donc d’utiliser QStyledItemDelegate comme classe de base lors de l’implémentation de délégués personnalisés ou lors de l’utilisation de feuilles de style Qt. Le code requis pour l’une ou l’autre classe devrait être identique, sauf si le délégué personnalisé doit utiliser le style pour le dessin.
Voir également Classes de délégués, QStyledItemDelegate et QAbstractItemDelegate.
Documentation sur les propriétés
clipping : bool
si le délégué doit découper les événements de dessin
Cette propriété définit le découpage de dessin à la taille de l'élément. La valeur par défaut est activée. Elle est utile notamment lorsque les images sont plus grandes que la taille de l'élément.
Fonctions d'accès :
| bool | hasClipping() const |
| void | setClipping(bool clip) |
Documentation des fonctions membres
[explicit] QItemDelegate::QItemDelegate(QObject *parent = nullptr)
Crée un délégué d'élément à partir de l'parent on fournie.
[virtual noexcept] QItemDelegate::~QItemDelegate()
Supprime le délégué de l'élément.
[override virtual] QWidget *QItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
Réimplémente : ` QAbstractItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const`.
Renvoie le widget utilisé pour modifier l’élément spécifié par index. Le widget parent et le style option permettent de contrôler l’apparence du widget d’édition.
Voir aussi QAbstractItemDelegate::createEditor().
[protected] void QItemDelegate::drawBackground(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
Affiche l'arrière-plan de l'élément pour l'index donné, en utilisant l'painter et le style option fournis.
[virtual protected] void QItemDelegate::drawCheck(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, Qt::CheckState state) const
Affiche un indicateur de coche à l'intérieur du rectangle défini par ` rect`, en utilisant l'painter et le style ` option` indiqués, ainsi que la couleur ` state` spécifiée.
[virtual protected] void QItemDelegate::drawDecoration(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QPixmap &pixmap) const
Affiche la décoration pixmap à l'intérieur du rectangle défini par rect en utilisant l'painter et le style option indiqués.
[virtual protected] void QItemDelegate::drawDisplay(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QString &text) const
Affiche la vue de l'élément text dans le rectangle spécifié par rect en utilisant l'painter et le style option fournis.
[virtual protected] void QItemDelegate::drawFocus(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect) const
Affiche la zone située à l'intérieur du rectangle spécifié par rect, en indiquant qu'elle a le focus, en utilisant l'painter et le style option fournis.
[override virtual protected] bool QItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
Réimplémente : ` QAbstractItemDelegate::editorEvent` (`QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index`).
[override virtual protected] bool QItemDelegate::eventFilter(QObject *object, QEvent *event)
Réimplémente : QObject::eventFilter(QObject *watched, QEvent *event).
Voir les détails dans QAbstractItemDelegate::handleEditorEvent().
QItemEditorFactory *QItemDelegate::itemEditorFactory() const
Renvoie la fabrique d'éditeurs utilisée par le délégué de l'élément. Si aucune fabrique d'éditeurs n'est définie, la fonction renvoie null.
Voir également setItemEditorFactory().
[override virtual] void QItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
Réimplémente : QAbstractItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const.
Affiche le délégué en utilisant l'painter et l'option de style fournis pour l'élément spécifié par index.
Lorsque vous réimplémentez cette fonction dans une sous-classe, vous devez mettre à jour la zone contenue dans la variable ` rect ` de l’option, en utilisant la variable ` state ` de l’option pour déterminer l’état de l’élément à afficher, puis ajuster son rendu en conséquence.
Par exemple, un élément sélectionné peut devoir être affiché différemment des éléments non sélectionnés, comme le montre le code suivant :
if (option.state & QStyle::State_Selected)
painter->fillRect(option.rect, option.palette.highlight());Après le dessin, vous devez vous assurer que le « painter » est ramené à l’état dans lequel il se trouvait lors de l’appel de cette fonction. Par exemple, il peut être utile d’appeler ` QPainter::save()` avant le dessin et ` QPainter::restore()` après.
Voir également ` QStyle::State`.
[override virtual] void QItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
Réimplémente : QAbstractItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const.
Définit les données à afficher et à modifier par le widget ` editor ` à partir de l’élément du modèle de données spécifié par l’ index.
L'implémentation par défaut stocke les données dans la propriété « user » du widget « editor ».
Voir aussi ` QMetaProperty::isUser()` .
void QItemDelegate::setItemEditorFactory(QItemEditorFactory *factory)
Définit l'éditeur de base que le délégué d'élément doit utiliser comme étant celui spécifié par factory. Si aucun éditeur de base n'est défini, le délégué d'élément utilisera l'éditeur de base par défaut.
Voir également itemEditorFactory().
[override virtual] void QItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
Réimplémente : QAbstractItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const.
Récupère les données du widget editor et les stocke dans l'model spécifié, à l'index.
L'implémentation par défaut récupère la valeur à stocker dans le modèle de données à partir de la propriété utilisateur du widget « editor ».
Voir également QMetaProperty::isUser().
[override virtual] QSize QItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
Réimplémente : QAbstractItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const.
Renvoie la taille nécessaire au délégué pour afficher l'élément spécifié par ` index`, en tenant compte des informations de style fournies par ` option`.
Lors de la réimplémentation de cette fonction, notez que dans le cas d’éléments de texte, QItemDelegate ajoute une marge (c’est-à-dire 2 * QStyle::PM_FocusFrameHMargin) à la longueur du texte.
[override virtual] void QItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
Réimplémente : QAbstractItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const.
Met à jour l'editor pour l'élément spécifié par index conformément à l'option de style fournie.
© 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.