QStyledItemDelegate Class
Die Klasse QStyledItemDelegate bietet Anzeige- und Bearbeitungsmöglichkeiten für Datenelemente aus einem Modell. Mehr...
Kopfzeile: | #include <QStyledItemDelegate> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
qmake: | QT += widgets |
Vererbt: | QAbstractItemDelegate |
Vererbt von: |
Öffentliche Funktionen
QStyledItemDelegate(QObject *parent = nullptr) | |
virtual | ~QStyledItemDelegate() |
virtual QString | displayText(const QVariant &value, const QLocale &locale) const |
QItemEditorFactory * | itemEditorFactory() const |
void | setItemEditorFactory(QItemEditorFactory *factory) |
Reimplementierte öffentliche Funktionen
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 |
Geschützte Funktionen
virtual void | initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const |
Reimplementierte geschützte Funktionen
virtual bool | editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override |
virtual bool | eventFilter(QObject *editor, QEvent *event) override |
Detaillierte Beschreibung
Bei der Anzeige von Daten aus Modellen in Qt-Elementansichten, z.B. einer QTableView, werden die einzelnen Elemente durch einen Delegaten gezeichnet. Wenn ein Element bearbeitet wird, stellt es außerdem ein Editor-Widget zur Verfügung, das während der Bearbeitung über der Elementansicht platziert wird. QStyledItemDelegate ist der Standarddelegat für alle Qt-Elementansichten und wird auf ihnen installiert, wenn sie erstellt werden.
Die Klasse QStyledItemDelegate gehört zu den Model/View-Klassen und ist Teil des Model/View-Frameworks von Qt. Der Delegate ermöglicht es, die Anzeige und Bearbeitung von Elementen unabhängig von Model und View zu entwickeln.
Die Daten von Items in Models werden einer ItemDataRole zugeordnet; jedes Item kann eine QVariant für jede Rolle speichern. QStyledItemDelegate implementiert die Anzeige und Bearbeitung für die gebräuchlichsten Datentypen, die von Benutzern erwartet werden, einschließlich Booleans, Integers und Strings.
Je nachdem, welche Rolle sie im Modell haben, werden die Daten unterschiedlich dargestellt. Die folgende Tabelle beschreibt die Rollen und die Datentypen, die der Delegat für jede von ihnen verarbeiten kann. Oft reicht es aus, sicherzustellen, dass das Modell geeignete Daten für jede der Rollen zurückgibt, um das Aussehen der Elemente in Ansichten zu bestimmen.
Rolle | Akzeptierte Typen |
---|---|
Qt::BackgroundRole | QBrush |
Qt::CheckStateRole | Qt::CheckState |
Qt::DecorationRole | QIcon, QPixmap, QImage und QColor |
Qt::DisplayRole | QString und Typen mit einer String-Darstellung |
Qt::EditRole | Siehe QItemEditorFactory für Details |
Qt::FontRole | QFont |
Qt::SizeHintRole | QSize |
Qt::TextAlignmentRole | Qt::Alignment |
Qt::ForegroundRole | QBrush |
Editoren werden mit einer QItemEditorFactory erstellt; eine statische Standardinstanz, die von QItemEditorFactory bereitgestellt wird, wird auf allen Item-Delegierten installiert. Sie können eine benutzerdefinierte Fabrik mit setItemEditorFactory() oder eine neue Standardfabrik mit QItemEditorFactory::setDefaultFactory() setzen.
QItemEditorFactory *editorFactory = new QItemEditorFactory; QItemEditorCreatorBase *creator = new QStandardItemEditorCreator<MyFancyDateTimeEdit>(); editorFactory->registerEditor(QMetaType::QDateTime, creator); QItemEditorFactory::setDefaultFactory(editorFactory);
Nachdem die neue Fabrik eingestellt wurde, wird sie von allen Standard-Elementdelegierten verwendet (d. h. auch von Delegierten, die vor der Einstellung der neuen Standardfabrik erstellt wurden).
Es sind die Daten, die im Item-Modell mit der EditRole gespeichert sind, die bearbeitet werden. Siehe die Klasse QItemEditorFactory für eine ausführlichere Einführung in Item-Editor-Fabriken.
Unterklassifizierung von QStyledItemDelegate
Wenn der Delegate das Malen der benötigten Datentypen nicht unterstützt oder Sie das Zeichnen von Elementen anpassen möchten, müssen Sie QStyledItemDelegate unterklassifizieren und paint() und möglicherweise sizeHint() neu implementieren. Die Funktion paint() wird für jedes Element einzeln aufgerufen, und mit sizeHint() können Sie den Hinweis für jedes dieser Elemente festlegen.
Bei der Neuimplementierung von paint() würde man typischerweise die Datentypen behandeln, die man zeichnen möchte, und die Implementierung der Oberklasse für andere Typen verwenden.
Das Zeichnen von Kontrollkästchen-Indikatoren wird durch den aktuellen Stil ausgeführt. Der Stil legt auch die Größe und die Begrenzungsrechtecke fest, in denen die Daten für die verschiedenen Datenrollen gezeichnet werden sollen. Das Begrenzungsrechteck des Elements selbst wird ebenfalls durch den Stil berechnet. Beim Zeichnen von bereits unterstützten Datentypen ist es daher ratsam, den Stil nach diesen Begrenzungsrechtecken zu fragen. In der Beschreibung der Klasse QStyle wird dies ausführlicher beschrieben.
Wenn Sie eines der durch den Stil berechneten Begrenzungsrechtecke oder das Malen von Kontrollkästchen-Indikatoren ändern möchten, können Sie die Unterklasse QStyle verwenden. Beachten Sie jedoch, dass die Größe der Elemente auch durch eine Neuimplementierung von sizeHint() beeinflusst werden kann.
Es ist möglich, dass ein benutzerdefinierter Delegat Editoren ohne die Verwendung einer Editorelementfabrik bereitstellt. In diesem Fall müssen die folgenden virtuellen Funktionen reimplementiert werden:
- createEditor() gibt das Widget zurück, das zum Ändern von Daten aus dem Modell verwendet wird und kann neu implementiert werden, um das Editierverhalten anzupassen.
- setEditorData() versorgt das Widget mit den zu bearbeitenden Daten.
- updateEditorGeometry() stellt sicher, dass der Editor in Bezug auf die Elementansicht korrekt angezeigt wird.
- setModelData() gibt aktualisierte Daten an das Modell zurück.
Das Star Delegate-Beispiel erstellt Editoren durch Neuimplementierung dieser Methoden.
QStyledItemDelegate vs. QItemDelegate
Seit Qt 4.4 gibt es zwei Delegate-Klassen: QItemDelegate und QStyledItemDelegate. Der Standarddelegat ist jedoch QStyledItemDelegate. Diese beiden Klassen sind unabhängige Alternativen zum Malen und Bereitstellen von Editoren für Elemente in Ansichten. Der Unterschied zwischen ihnen ist, dass QStyledItemDelegate den aktuellen Stil verwendet, um seine Elemente zu malen. Wir empfehlen daher, QStyledItemDelegate als Basisklasse zu verwenden, wenn Sie benutzerdefinierte Delegates implementieren oder mit Qt-Stylesheets arbeiten. Der für beide Klassen erforderliche Code sollte gleich sein, es sei denn, der benutzerdefinierte Delegate muss den Stil zum Zeichnen verwenden.
Wenn Sie die Zeichnung von Elementansichten anpassen möchten, sollten Sie einen eigenen Stil implementieren. Bitte lesen Sie die Dokumentation der Klasse QStyle für weitere Details.
Siehe auch Delegate Classes, QItemDelegate, QAbstractItemDelegate, QStyle, und Star Delegate Example.
Dokumentation der Mitgliedsfunktionen
[explicit]
QStyledItemDelegate::QStyledItemDelegate(QObject *parent = nullptr)
Konstruiert einen Item-Delegaten mit dem angegebenen parent.
[virtual noexcept]
QStyledItemDelegate::~QStyledItemDelegate()
Zerstört den Objektdelegaten.
[override virtual]
QWidget *QStyledItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
Reimplements: QAbstractItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const.
Gibt das Widget zurück, das zur Bearbeitung des durch index angegebenen Elements verwendet wird. Das Widget parent und der Stil option werden verwendet, um zu steuern, wie das Editor-Widget erscheint.
Siehe auch QAbstractItemDelegate::createEditor().
[virtual]
QString QStyledItemDelegate::displayText(const QVariant &value, const QLocale &locale) const
Diese Funktion gibt die Zeichenkette zurück, die der Delegierte verwenden wird, um die Qt::DisplayRole des Modells in locale anzuzeigen. value ist der Wert des Qt::DisplayRole, der vom Modell bereitgestellt wird.
Die Standardimplementierung verwendet QLocale::toString, um value in QString umzuwandeln.
Diese Funktion wird nicht für leere Modellindizes aufgerufen, d.h. für Indizes, für die das Modell einen ungültigen QVariant zurückgibt.
Siehe auch QAbstractItemModel::data().
[override virtual protected]
bool QStyledItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
Reimplements: QAbstractItemDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index).
[override virtual protected]
bool QStyledItemDelegate::eventFilter(QObject *editor, QEvent *event)
Reimplements: QObject::eventFilter(QObject *watched, QEvent *event).
Gibt true
zurück, wenn das angegebene editor ein gültiges QWidget ist und das angegebene event behandelt wird; andernfalls gibt es false
zurück. Die folgenden Tastendruck-Ereignisse werden standardmäßig behandelt:
- Tab
- Backtab
- Enter
- Return
- Esc
Wenn der Typ von editor QTextEdit oder QPlainTextEdit ist, werden die Tasten Tab, Backtab, Enter und Return nicht behandelt.
Bei den Ereignissen Tab, Backtab, Enter und Return werden die Daten von editor in das Modell übernommen und der Editor wird geschlossen. Wenn event ein Tab Tastendruck ist, öffnet die Ansicht einen Editor für das nächste Element in der Ansicht. Handelt es sich bei event um einen Backtab Tastendruck, öffnet die Ansicht einen Editor für das vorherige Element in der Ansicht.
Handelt es sich bei dem Ereignis um einen Esc Tastendruck, wird die editor geschlossen , ohne dass die Daten übernommen werden.
Siehe auch commitData() und closeEditor().
[virtual protected]
void QStyledItemDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const
Initialisieren Sie option mit den Werten über den Index index. Diese Methode ist für Unterklassen nützlich, wenn sie eine QStyleOptionViewItem benötigen, aber nicht alle Informationen selbst eingeben wollen.
Siehe auch QStyleOption::initFrom().
QItemEditorFactory *QStyledItemDelegate::itemEditorFactory() const
Gibt die vom Elementdelegaten verwendete Editorfabrik zurück. Wenn keine Editorfabrik gesetzt ist, gibt die Funktion null zurück.
Siehe auch setItemEditorFactory().
[override virtual]
void QStyledItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
Reimplements: QAbstractItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const.
Rendert den Delegaten unter Verwendung des angegebenen painter und des Stils option für das durch index angegebene Element.
Diese Funktion malt das Element unter Verwendung der QStyle der Ansicht.
Bei der Neuimplementierung von paint in einer Unterklasse. Verwenden Sie initStyleOption(), um option auf dieselbe Weise wie QStyledItemDelegate einzurichten.
Wann immer möglich, verwenden Sie die option während des Malens. Insbesondere die Variable rect, um zu entscheiden, wo gezeichnet werden soll, und die Variable state, um festzustellen, ob sie aktiviert oder ausgewählt ist.
Nach dem Malen sollten Sie sicherstellen, dass der Painter in den Zustand zurückversetzt wird, in dem er beim Aufruf dieser Funktion geliefert wurde. Es kann zum Beispiel sinnvoll sein, QPainter::save() vor dem Malen und QPainter::restore() danach aufzurufen.
Siehe auch QItemDelegate::paint(), QStyle::drawControl(), und QStyle::CE_ItemViewItem.
[override virtual]
void QStyledItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
Reimplements: QAbstractItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const.
Legt die vom editor anzuzeigenden und zu bearbeitenden Daten aus dem vom Model index angegebenen Datenmodellelement fest.
Die Standardimplementierung speichert die Daten in der Benutzereigenschaft des Widgets editor.
Siehe auch QMetaProperty::isUser().
void QStyledItemDelegate::setItemEditorFactory(QItemEditorFactory *factory)
Legt die vom Elementdelegierten zu verwendende Editorfabrik auf die angegebene factory fest. Wenn keine Editorfabrik festgelegt ist, verwendet der Elementdelegierte die Standard-Editorfabrik.
Siehe auch itemEditorFactory().
[override virtual]
void QStyledItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
Reimplements: QAbstractItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const.
Holt Daten aus dem Widget editor und speichert sie im angegebenen model unter dem Element index.
Die Standardimplementierung bezieht den im Datenmodell zu speichernden Wert aus der Benutzereigenschaft des editor Widgets.
Siehe auch QMetaProperty::isUser().
[override virtual]
QSize QStyledItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
Reimplements: QAbstractItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const.
Gibt die Größe zurück, die der Delegierte benötigt, um das durch index angegebene Element anzuzeigen, wobei die durch option bereitgestellten Stilinformationen berücksichtigt werden.
Diese Funktion verwendet die QStyle der Ansicht, um die Größe des Elements zu bestimmen.
Siehe auch QStyle::sizeFromContents() und QStyle::CT_ItemViewItem.
[override virtual]
void QStyledItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const
Reimplements: QAbstractItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const.
Aktualisiert die editor für das durch index angegebene Element gemäß dem angegebenen Stil option.
© 2025 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.