QStyledItemDelegate Class
La classe QStyledItemDelegate offre des possibilités d'affichage et d'édition pour les éléments de données d'un modèle. Plus d'informations...
| En-tête : | #include <QStyledItemDelegate> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Widgets)target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake : | QT += widgets |
| Hérite : | QAbstractItemDelegate |
| Hérité par : |
Fonctions publiques
| QStyledItemDelegate(QObject *parent = nullptr) | |
| virtual | ~QStyledItemDelegate() |
| virtual QString | displayText(const QVariant &value, const QLocale &locale) const |
| QItemEditorFactory * | itemEditorFactory() const |
| 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
| virtual void | initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) 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
Lors de l'affichage de données provenant de modèles dans des vues d'éléments Qt, par exemple, un QTableView, les éléments individuels sont dessinés par un délégué. De plus, lorsqu'un élément est modifié, il fournit un widget d'éditeur, qui est placé au-dessus de la vue de l'élément pendant la modification. QStyledItemDelegate est le délégué par défaut de toutes les vues d'éléments de Qt et est installé sur celles-ci lorsqu'elles sont créées.
La classe QStyledItemDelegate est l'une des classes Modèle/Vue et fait partie du cadre Modèle/Vue de Qt. Le délégué permet de développer l'affichage et l'édition des éléments indépendamment du modèle et de la vue.
Les données des éléments dans les modèles se voient attribuer un ItemDataRole; chaque élément peut stocker un QVariant pour chaque rôle. QStyledItemDelegate met en œuvre l'affichage et l'édition des types de données les plus courants attendus par les utilisateurs, notamment les booléens, les entiers et les chaînes de caractères.
Les données seront affichées différemment en fonction du rôle qu'elles occupent dans le modèle. Le tableau suivant décrit les rôles et les types de données que le délégué peut gérer pour chacun d'entre eux. Il suffit souvent de s'assurer que le modèle renvoie les données appropriées pour chacun des rôles afin de déterminer l'apparence des éléments dans les vues.
| Rôle | Types acceptés |
|---|---|
| Qt::BackgroundRole | QBrush |
| Qt::CheckStateRole | Qt::CheckState |
| Qt::DecorationRole | QIcon, QPixmap, QImage et QColor |
| Qt::DisplayRole | QString et les types avec 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 |
Les éditeurs sont créés avec un QItemEditorFactory; une instance statique par défaut fournie par QItemEditorFactory est installée sur tous les délégués d'éléments. Vous pouvez définir une usine personnalisée en utilisant setItemEditorFactory() ou définir une nouvelle usine par défaut avec QItemEditorFactory::setDefaultFactory().
QItemEditorFactory *editorFactory = new QItemEditorFactory; QItemEditorCreatorBase *creator = new QStandardItemEditorCreator<MyFancyDateTimeEdit>(); editorFactory->registerEditor(QMetaType::QDateTime, creator); QItemEditorFactory::setDefaultFactory(editorFactory);
Une fois la nouvelle fabrique définie, tous les délégués d'éléments standard l'utiliseront (c'est-à-dire également les délégués qui ont été créés avant que la nouvelle fabrique par défaut n'ait été définie).
Ce sont les données stockées dans le modèle d'élément avec EditRole qui sont modifiées. Voir la classe QItemEditorFactory pour une introduction de plus haut niveau aux fabriques d'éditeurs d'éléments.
Sous-classement de QStyledItemDelegate
Si le délégué ne prend pas en charge la peinture des types de données dont vous avez besoin ou si vous souhaitez personnaliser le dessin des éléments, vous devez sous-classer QStyledItemDelegate et réimplémenter paint() et éventuellement sizeHint(). La fonction paint() est appelée individuellement pour chaque élément, et avec sizeHint(), vous pouvez spécifier l'indice pour chacun d'entre eux.
Lors de la réimplémentation de paint(), il convient généralement de gérer les types de données que l'on souhaite dessiner et d'utiliser l'implémentation de la superclasse pour les autres types.
La peinture des indicateurs de cases à cocher est réalisée par le style actuel. Le style spécifie également la taille et les rectangles de délimitation dans lesquels les données doivent être dessinées pour les différents rôles de données. Le rectangle de délimitation de l'élément lui-même est également calculé par le style. Lorsque l'on dessine des types de données déjà pris en charge, il est donc judicieux de demander au style d'indiquer ces rectangles de délimitation. La description de la classe QStyle décrit cela plus en détail.
Si vous souhaitez modifier l'un des rectangles de délimitation calculés par le style ou la peinture des indicateurs de cases à cocher, vous pouvez sous-classer QStyle. Notez toutefois que la taille des éléments peut également être modifiée en réimplémentant sizeHint().
Il est possible pour un délégué personnalisé de fournir des éditeurs sans utiliser de fabrique d'éléments d'éditeur. Dans ce cas, les fonctions virtuelles suivantes doivent être réimplémentées :
- 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 est affiché correctement par rapport à la vue de l'élément.
- setModelData() renvoie les données mises à jour au modèle.
L'exemple Star Delegate crée des éditeurs en réimplémentant ces méthodes.
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 sont des alternatives indépendantes pour peindre et fournir des éditeurs pour les éléments dans les vues. La différence entre elles est que QStyledItemDelegate utilise le style actuel pour peindre 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 lorsque l'on travaille avec des feuilles de style Qt. Le code requis pour l'une ou l'autre classe devrait être le même, à moins que le délégué personnalisé n'ait besoin d'utiliser le style pour dessiner.
Si vous souhaitez personnaliser la peinture des vues d'éléments, vous devez implémenter un style personnalisé. Veuillez consulter la documentation de la classe QStyle pour plus de détails.
Voir également Classes de délégués, QItemDelegate, QAbstractItemDelegate, QStyle, et Exemple de délégué en étoile.
Documentation sur les fonctions membres
[explicit] QStyledItemDelegate::QStyledItemDelegate(QObject *parent = nullptr)
Construit un délégué de l'élément avec l'adresse parent.
[virtual noexcept] QStyledItemDelegate::~QStyledItemDelegate()
Détruit le délégué de l'élément.
[override virtual] QWidget *QStyledItemDelegate::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 sont utilisés pour contrôler l'apparence du widget de l'éditeur.
Voir aussi QAbstractItemDelegate::createEditor().
[virtual] QString QStyledItemDelegate::displayText(const QVariant &value, const QLocale &locale) const
Cette fonction renvoie la chaîne que le délégué utilisera pour afficher le Qt::DisplayRole du modèle dans locale. value est la valeur du Qt::DisplayRole fournie par le modèle.
L'implémentation par défaut utilise QLocale::toString pour convertir value en QString.
Cette fonction n'est pas appelée pour les indices de modèle vides, c'est-à-dire les indices pour lesquels le modèle renvoie un QVariant invalide.
Voir aussi QAbstractItemModel::data().
[override virtual protected] bool QStyledItemDelegate::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 QStyledItemDelegate::eventFilter(QObject *object, QEvent *event)
Réimplémente : QObject::eventFilter(QObject *watched, QEvent *event).
Voir les détails dans QAbstractItemDelegate::handleEditorEvent().
[virtual protected] void QStyledItemDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const
Initialiser option avec les valeurs utilisant l'index index. Cette méthode est utile pour les sous-classes lorsqu'elles ont besoin d'un QStyleOptionViewItem, mais qu'elles ne veulent pas remplir toutes les informations elles-mêmes.
Voir aussi QStyleOption::initFrom().
QItemEditorFactory *QStyledItemDelegate::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 aussi setItemEditorFactory().
[override virtual] void QStyledItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
Réimplémente : QAbstractItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const.
Effectue le rendu du délégué à l'aide de l'adresse painter et du style option pour l'élément spécifié par index.
Cette fonction peint l'élément en utilisant la vue QStyle.
Lors de la réimplémentation de paint dans une sous-classe. Utilisez initStyleOption() pour configurer option de la même manière que QStyledItemDelegate.
Dans la mesure du possible, utilisez option pour peindre. En particulier sa variable rect pour décider où dessiner et sa variable state pour déterminer si elle est activée ou sélectionnée.
Après avoir peint, vous devez vous assurer que le peintre est ramené à l'état dans lequel il a été fourni lorsque cette fonction a été appelée. Par exemple, il peut être utile d'appeler QPainter::save() avant de peindre et QPainter::restore() après.
Voir également QItemDelegate::paint(), QStyle::drawControl() et QStyle::CE_ItemViewItem.
[override virtual] void QStyledItemDelegate::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 de modèle de données spécifié par le modèle index.
L'implémentation par défaut stocke les données dans la propriété utilisateur du widget editor.
Voir aussi QMetaProperty::isUser().
void QStyledItemDelegate::setItemEditorFactory(QItemEditorFactory *factory)
Définit l'usine d'édition à utiliser par le délégué de l'élément à l'adresse factory spécifiée. Si aucune usine d'édition n'est définie, le délégué de l'élément utilisera l'usine d'édition par défaut.
Voir également itemEditorFactory().
[override virtual] void QStyledItemDelegate::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 le widget model spécifié à l'élément index.
L'implémentation par défaut obtient la valeur à stocker dans le modèle de données à partir de la propriété utilisateur du widget editor.
Voir aussi QMetaProperty::isUser().
[override virtual] QSize QStyledItemDelegate::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.
Cette fonction utilise le site QStyle de la vue pour déterminer la taille de l'élément.
Voir aussi QStyle::sizeFromContents() et QStyle::CT_ItemViewItem.
[override virtual] void QStyledItemDelegate::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 le site editor pour l'élément spécifié par index en fonction du style option indiqué.
© 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.