QAbstractItemDelegate Class
La classe QAbstractItemDelegate est utilisée pour afficher et modifier les éléments de données d'un modèle. Plus d'informations...
| En-tête : | #include <QAbstractItemDelegate> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Widgets)target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake : | QT += widgets |
| Hérite : | QObject |
| Héritée par : |
Types publics
| enum | EndEditHint { NoHint, EditNextItem, EditPreviousItem, SubmitModelCache, RevertModelCache } |
Fonctions publiques
| QAbstractItemDelegate(QObject *parent = nullptr) | |
| virtual | ~QAbstractItemDelegate() |
| virtual QWidget * | createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const |
| virtual void | destroyEditor(QWidget *editor, const QModelIndex &index) const |
| virtual bool | editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) |
(since 6.10) bool | handleEditorEvent(QObject *editor, QEvent *event) |
| virtual bool | helpEvent(QHelpEvent *event, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index) |
| virtual void | paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const = 0 |
| virtual void | setEditorData(QWidget *editor, const QModelIndex &index) const |
| virtual void | setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const |
| virtual QSize | sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const = 0 |
| virtual void | updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const |
Signaux
| void | closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint = NoHint) |
| void | commitData(QWidget *editor) |
| void | sizeHintChanged(const QModelIndex &index) |
Description détaillée
Un QAbstractItemDelegate fournit l'interface et la fonctionnalité commune pour les délégués dans l'architecture modèle/vue. Les délégués affichent des éléments individuels dans les vues et gèrent l'édition des données du modèle.
La classe QAbstractItemDelegate est l'une des classes Modèle/Vue et fait partie du cadre modèle/vue de Qt.
Pour rendre un élément de manière personnalisée, vous devez implémenter les classes paint() et sizeHint(). La classe QStyledItemDelegate fournit des implémentations par défaut pour ces fonctions ; si vous n'avez pas besoin d'un rendu personnalisé, sous-classez cette classe à la place.
Nous donnons un exemple de dessin d'une barre de progression dans des éléments, dans notre cas pour un programme de gestion de paquets.

Nous créons la classe WidgetDelegate, qui hérite de la classe QStyledItemDelegate. Nous réalisons le dessin dans la fonction paint() :
void WidgetDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { if (index.column() == 1) { int progress = index.data().toInt(); QStyleOptionProgressBar progressBarOption; progressBarOption.rect = option.rect; progressBarOption.minimum = 0; progressBarOption.maximum = 100; progressBarOption.progress = progress; progressBarOption.text = QString::number(progress) + "%"; progressBarOption.textVisible = true; QApplication::style()->drawControl(QStyle::CE_ProgressBar, &progressBarOption, painter); } else QStyledItemDelegate::paint(painter, option, index);
Remarquez que nous utilisons un QStyleOptionProgressBar et que nous initialisons ses membres. Nous pouvons ensuite utiliser l'actuel QStyle pour le dessiner.
Pour fournir une édition personnalisée, deux approches peuvent être utilisées. La première consiste à créer un widget d'édition et à l'afficher directement au-dessus de l'élément. Pour ce faire, vous devez réimplémenter createEditor() pour fournir un widget d'éditeur, setEditorData() pour remplir l'éditeur avec les données du modèle, et setModelData() pour que le délégué puisse mettre à jour le modèle avec les données de l'éditeur.
La seconde approche consiste à gérer directement les événements utilisateur en réimplémentant editorEvent().
Voir également Programmation Modèle/Vue, QStyledItemDelegate, et QStyle.
Documentation sur les types de membres
enum QAbstractItemDelegate::EndEditHint
Cette énumération décrit les différentes indications que le délégué peut donner aux composants du modèle et de la vue pour rendre l'édition des données d'un modèle plus confortable pour l'utilisateur.
| Constante | Valeur | Description |
|---|---|---|
QAbstractItemDelegate::NoHint | 0 | Il n'y a pas d'action recommandée à effectuer. |
Ces indications permettent au délégué d'influencer le comportement de la vue :
| Constante | Valeur | Description |
|---|---|---|
QAbstractItemDelegate::EditNextItem | 1 | La vue doit utiliser le délégué pour ouvrir un éditeur sur l'élément suivant de la vue. |
QAbstractItemDelegate::EditPreviousItem | 2 | La vue doit utiliser le délégué pour ouvrir un éditeur sur l'élément précédent de la vue. |
Notez que les vues personnalisées peuvent interpréter différemment les concepts de suivant et de précédent.
Les conseils suivants sont particulièrement utiles lorsque les modèles utilisés mettent les données en cache, comme ceux qui manipulent les données localement afin d'augmenter les performances ou de conserver la bande passante du réseau.
| Constante | Valeur | Description |
|---|---|---|
QAbstractItemDelegate::SubmitModelCache | 3 | Si le modèle met des données en cache, il doit écrire les données mises en cache dans le magasin de données sous-jacent. |
QAbstractItemDelegate::RevertModelCache | 4 | Si le modèle met des données en cache, il doit les supprimer et les remplacer par des données provenant du magasin de données sous-jacent. |
Bien que les modèles et les vues doivent répondre à ces indications de manière appropriée, les composants personnalisés peuvent ignorer tout ou partie de ces indications si elles ne sont pas pertinentes.
Documentation des fonctions membres
[explicit] QAbstractItemDelegate::QAbstractItemDelegate(QObject *parent = nullptr)
Crée un nouveau délégué abstrait à l'objet avec l'adresse parent.
[virtual noexcept] QAbstractItemDelegate::~QAbstractItemDelegate()
Détruit le délégué de l'élément abstrait.
[signal] void QAbstractItemDelegate::closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint = NoHint)
Ce signal est émis lorsque l'utilisateur a terminé l'édition d'un élément à l'aide de l'adresse editor.
L'adresse hint permet au délégué d'influer sur le comportement du modèle et de la vue une fois l'édition terminée. Il indique à ces composants l'action à effectuer ensuite pour offrir à l'utilisateur une expérience d'édition confortable. Par exemple, si EditNextItem est spécifié, la vue doit utiliser un délégué pour ouvrir un éditeur sur l'élément suivant du modèle.
Voir également EndEditHint.
[signal] void QAbstractItemDelegate::commitData(QWidget *editor)
Ce signal doit être émis lorsque le widget editor a terminé l'édition des données et souhaite les réécrire dans le modèle.
[virtual] QWidget *QAbstractItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
Renvoie l'éditeur à utiliser pour modifier l'élément de données avec l'adresse index. Notez que l'index contient des informations sur le modèle utilisé. Le widget parent de l'éditeur est spécifié par parent, et les options de l'élément par option.
L'implémentation de base renvoie nullptr. Si vous souhaitez une édition personnalisée, vous devrez réimplémenter cette fonction.
Le widget de l'éditeur renvoyé doit avoir Qt::StrongFocus; sinon, les QMouseEventreçus par le widget se propageront à la vue. L'arrière-plan de la vue sera visible à moins que l'éditeur ne peigne son propre arrière-plan (par exemple, avec setAutoFillBackground()).
Voir également destroyEditor(), setModelData() et setEditorData().
[virtual] void QAbstractItemDelegate::destroyEditor(QWidget *editor, const QModelIndex &index) const
Appelé lorsque le site editor n'est plus nécessaire pour l'édition de l'élément de données avec le site index donné et qu'il doit être détruit. Le comportement par défaut est un appel à deleteLater sur l'éditeur. Il est possible, par exemple, d'éviter cette suppression en réimplémentant cette fonction.
Voir aussi createEditor().
[virtual] bool QAbstractItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
Lorsque l'édition d'un élément commence, cette fonction est appelée avec le event qui a déclenché l'édition, le model, le index de l'élément et le option utilisé pour le rendu de l'élément.
Les événements de souris sont envoyés à editorEvent() même s'ils ne déclenchent pas l'édition de l'élément. Cela peut, par exemple, être utile si vous souhaitez ouvrir un menu contextuel lorsque le bouton droit de la souris est pressé sur un élément.
L'implémentation de base renvoie false (indiquant qu'elle n'a pas traité l'événement).
[since 6.10] bool QAbstractItemDelegate::handleEditorEvent(QObject *editor, QEvent *event)
Met en œuvre la gestion standard des événements pour le compte de l'utilisateur actif editor. Appelez cette fonction à partir d'une surcharge de eventFilter() dans une sous-classe de QAbstractItemModel et renvoyez le résultat. Pour éviter un double traitement des événements, n'appelez pas l'implémentation de la classe mère de eventFilter() après avoir appelé cette fonction.
Renvoie true si editor est un QWidget valide et si event est traité ; sinon, renvoie false. Les événements de pression de touche suivants sont traités par défaut :
- Tab
- Backtab
- Enter
- Return
- Esc
Si le type de editor est QTextEdit ou QPlainTextEdit, les touches Tab, Backtab, Enter et Return ne sont pas traitées.
Dans le cas des touches Tab, Backtab, Enter et Return, les données de editor sont intégrées au modèle et l'éditeur est fermé. Si la touche event est une touche Tab, la vue ouvre un éditeur sur l'élément suivant de la vue. De même, si l'événement event est une pression de touche Backtab, la vue ouvre un éditeur sur l'élément précédent de la vue.
Si l'événement est une pression sur la touche Esc, la fenêtre editor est fermée sans que ses données ne soient transférées.
Cette fonction a été introduite dans Qt 6.10.
Voir aussi commitData() et closeEditor().
[virtual] bool QAbstractItemDelegate::helpEvent(QHelpEvent *event, QAbstractItemView *view, const QStyleOptionViewItem &option, const QModelIndex &index)
Chaque fois qu'un événement d'aide se produit, cette fonction est appelée avec event view option et index qui correspond à l'élément où l'événement se produit.
Elle renvoie true si le délégué peut gérer l'événement, sinon elle renvoie false. Une valeur de retour de true indique que les données obtenues à l'aide de l'index avaient le rôle requis.
Pour les événements QEvent::ToolTip et QEvent::WhatsThis qui ont été traités avec succès, la fenêtre contextuelle correspondante peut s'afficher en fonction de la configuration du système de l'utilisateur.
Voir aussi QHelpEvent.
[pure virtual] void QAbstractItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
Cette fonction purement abstraite doit être réimplémentée si vous souhaitez fournir un rendu personnalisé. Utilisez painter et le style option pour effectuer le rendu de l'élément spécifié par l'élément index.
Si vous réimplémentez cette fonction, vous devez également réimplémenter sizeHint().
[virtual] void QAbstractItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
Définit le contenu de l'adresse editor donnée comme étant les données de l'article à l'adresse index donnée. Notez que l'index contient des informations sur le modèle utilisé.
L'implémentation de base ne fait rien. Si vous souhaitez une édition personnalisée, vous devrez réimplémenter cette fonction.
Voir aussi setModelData().
[virtual] void QAbstractItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
Définit les données de l'élément situé à l'adresse index dans l'adresse model en fonction du contenu de l'adresse editor.
L'implémentation de base ne fait rien. Si vous souhaitez une édition personnalisée, vous devrez réimplémenter cette fonction.
Voir aussi setEditorData().
[pure virtual] QSize QAbstractItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
Cette fonction purement abstraite doit être réimplémentée si vous souhaitez fournir un rendu personnalisé. Les options sont spécifiées par option et l'élément de modèle par index.
Si vous réimplémentez cette fonction, vous devez également réimplémenter paint().
[signal] void QAbstractItemDelegate::sizeHintChanged(const QModelIndex &index)
Ce signal doit être émis lorsque l'adresse sizeHint() de index est modifiée.
Les vues se connectent automatiquement à ce signal et relaient les éléments si nécessaire.
[virtual] void QAbstractItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
Met à jour la géométrie du site editor pour l'élément avec l'adresse index, selon le rectangle spécifié dans option. Si l'élément a une disposition interne, l'éditeur sera disposé en conséquence. Notez que l'index contient des informations sur le modèle utilisé.
L'implémentation de base ne fait rien. Si vous souhaitez une édition personnalisée, vous devez réimplémenter cette fonction.
© 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.