Auf dieser Seite

QStyledItemDelegate Class

Die Klasse „QStyledItemDelegate“ bietet Funktionen zur Anzeige und Bearbeitung von Datenelementen aus einem Modell. Mehr...

Kopfzeile: #include <QStyledItemDelegate>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
Erbt von: QAbstractItemDelegate
Vererbt an:

QSqlRelationalDelegate

Ö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)

Neu implementierte ö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

Neu implementierte geschützte Funktionen

virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override
virtual bool eventFilter(QObject *object, QEvent *event) override

Ausführliche Beschreibung

Bei der Anzeige von Daten aus Modellen in Qt-Item-Ansichten, z. B. einer „ QTableView “, werden die einzelnen Elemente von einem Delegaten gezeichnet. Wenn ein Element bearbeitet wird, stellt es außerdem ein Editor-Widget bereit, das während der Bearbeitung über der Item-Ansicht platziert wird. `QStyledItemDelegate` ist der Standard-Delegat für alle Qt-Elementansichten und wird bei deren Erstellung auf diese angewendet.

Die Klasse `QStyledItemDelegate` gehört zu den Modell- und Ansichts-Klassen und ist Teil des Modell-Ansichts-Frameworks von Qt. Der Delegat ermöglicht es, die Anzeige und Bearbeitung von Elementen unabhängig vom Modell und der Ansicht zu entwickeln.

Den Daten von Elementen in Modellen wird ein „ ItemDataRole “ zugewiesen; jedes Element kann für jede Rolle ein „ QVariant “ speichern. QStyledItemDelegate implementiert die Darstellung und Bearbeitung der gängigsten Datentypen, die von Benutzern erwartet werden, darunter Boolesche Werte, Ganzzahlen und Zeichenketten.

Die Darstellung der Daten hängt davon ab, welche Rolle sie im Modell einnehmen. Die folgende Tabelle beschreibt die Rollen und die Datentypen, die der Delegat für jede dieser Rollen verarbeiten kann. Oft reicht es aus, sicherzustellen, dass das Modell für jede der Rollen geeignete Daten zurückgibt, um das Erscheinungsbild der Elemente in den Ansichten zu bestimmen.

Editoren werden mit einer „ QItemEditorFactory “ erstellt; eine von „ QItemEditorFactory “ bereitgestellte statische Standardinstanz wird auf allen Item-Delegaten installiert. Sie können eine benutzerdefinierte Factory mit „ setItemEditorFactory()“ festlegen oder eine neue Standard-Factory mit „ QItemEditorFactory::setDefaultFactory()“ festlegen.

QItemEditorFactory *editorFactory = new QItemEditorFactory;
QItemEditorCreatorBase *creator = new QStandardItemEditorCreator<MyFancyDateTimeEdit>();
editorFactory->registerEditor(QMetaType::QDateTime, creator);

QItemEditorFactory::setDefaultFactory(editorFactory);

Nachdem die neue Factory festgelegt wurde, verwenden alle Standard-Item-Delegaten diese (d. h. auch Delegaten, die vor der Festlegung der neuen Standard-Factory erstellt wurden).

Es sind die im Elementmodell mit dem „ EditRole “ gespeicherten Daten, die bearbeitet werden. Eine allgemeinere Einführung in Item-Editor-Factory-Klassen finden Sie in der Klasse „ QItemEditorFactory “.

Unterklassen von QStyledItemDelegate

Wenn der Delegat das Zeichnen der benötigten Datentypen nicht unterstützt oder Sie die Darstellung von Elementen anpassen möchten, müssen Sie eine Unterklasse von `QStyledItemDelegate` erstellen und ` paint()` sowie gegebenenfalls ` sizeHint()` neu implementieren. Die Funktion ` paint()` wird für jedes Element einzeln aufgerufen, und mit ` sizeHint()` können Sie für jedes Element einen Hinweis festlegen.

Bei der Neuimplementierung von ` paint()` behandelt man in der Regel die Datentypen, die man zeichnen möchte, und nutzt die Implementierung der Oberklasse für andere Typen.

Das Zeichnen der Kontrollkästchen-Indikatoren erfolgt durch den aktuellen Stil. 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 vom Stil berechnet. Beim Zeichnen bereits unterstützter Datentypen ist es daher ratsam, diese Begrenzungsrechtecke vom Stil abzufragen. Die Klassenbeschreibung von ` QStyle ` erläutert dies ausführlicher.

Wenn Sie eines der vom Stil berechneten Begrenzungsrechtecke oder die Darstellung der Kontrollkästchen-Indikatoren ändern möchten, können Sie eine Unterklasse von ` QStyle` erstellen. Beachten Sie jedoch, dass die Größe der Elemente auch durch die Neuimplementierung von ` sizeHint()` beeinflusst werden kann.

Es ist möglich, dass ein benutzerdefinierter Delegat Editoren bereitstellt, ohne eine Editor-Element-Factory zu verwenden. In diesem Fall müssen die folgenden virtuellen Funktionen neu implementiert werden:

  • createEditor() gibt das Widget zurück, das zum Ändern von Daten aus dem Modell verwendet wird, und kann neu implementiert werden, um das Bearbeitungsverhalten anzupassen.
  • setEditorData() stellt dem Widget die zu bearbeitenden Daten zur Verfügung.
  • updateEditorGeometry() stellt sicher, dass der Editor in Bezug auf die Elementansicht korrekt angezeigt wird.
  • setModelData() gibt aktualisierte Daten an das Modell zurück.

Das Beispiel „Star Delegate“ erstellt Editoren durch die Neuimplementierung dieser Methoden.

QStyledItemDelegate vs. QItemDelegate

Seit Qt 4.4 gibt es zwei Delegate-Klassen: „ QItemDelegate “ und „QStyledItemDelegate“. Der Standard-Delegate ist jedoch „QStyledItemDelegate“. Diese beiden Klassen sind unabhängige Alternativen zum Zeichnen und Bereitstellen von Editoren für Elemente in Ansichten. Der Unterschied zwischen ihnen besteht darin, dass `QStyledItemDelegate` den aktuellen Stil zum Zeichnen seiner Elemente verwendet. Wir empfehlen daher, `QStyledItemDelegate` als Basisklasse zu verwenden, wenn Sie benutzerdefinierte Delegaten implementieren oder mit Qt-Stylesheets arbeiten. Der für beide Klassen erforderliche Code sollte identisch sein, es sei denn, der benutzerdefinierte Delegat muss den Stil zum Zeichnen verwenden.

Wenn Sie die Darstellung von Elementansichten anpassen möchten, sollten Sie einen benutzerdefinierten Stil implementieren. Weitere Informationen finden Sie in der Dokumentation zur Klasse ` QStyle `.

Siehe auch Delegate-Klassen, „ QItemDelegate “, „ QAbstractItemDelegate “, „ QStyle “ und das Star-Delegate-Beispiel.

Dokumentation zu Mitgliedsfunktionen

[explicit] QStyledItemDelegate::QStyledItemDelegate(QObject *parent = nullptr)

Erstellt einen Item-Delegaten mit dem angegebenen „ parent “.

[virtual noexcept] QStyledItemDelegate::~QStyledItemDelegate()

Löscht den Item-Delegaten.

[override virtual] QWidget *QStyledItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const

Implementiert: ` 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 die Stil option dienen zur Steuerung der Darstellung des Editor-Widgets.

Siehe auch QAbstractItemDelegate::createEditor().

[virtual] QString QStyledItemDelegate::displayText(const QVariant &value, const QLocale &locale) const

Diese Funktion gibt die Zeichenfolge zurück, die der Delegat verwendet, um die „ Qt::DisplayRole “ des Modells unter „ locale “ anzuzeigen. „ value “ ist der Wert von „ Qt::DisplayRole “, der vom Modell bereitgestellt wird.

Die Standardimplementierung verwendet den „ QLocale::toString “, um „ value “ in einen „ QString “ umzuwandeln.

Diese Funktion wird bei leeren Modellindizes nicht aufgerufen, d. h. bei 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)

Umsetzt: ` QAbstractItemDelegate::editorEvent` (`QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index`).

[override virtual protected] bool QStyledItemDelegate::eventFilter(QObject *object, QEvent *event)

Umsetzt: QObject::eventFilter(QObject *watched, QEvent *event).

Einzelheiten finden Sie unter „ QAbstractItemDelegate::handleEditorEvent()“.

[virtual protected] void QStyledItemDelegate::initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const

Initialisieren Sie ` option ` mit den Werten aus dem Index ` index`. Diese Methode ist für Unterklassen nützlich, wenn diese ein ` QStyleOptionViewItem` benötigen, aber nicht alle Informationen selbst eingeben möchten.

Siehe auch ` QStyleOption::initFrom()`.

QItemEditorFactory *QStyledItemDelegate::itemEditorFactory() const

Gibt die vom Item-Delegaten verwendete Editor-Factory zurück. Ist keine Editor-Factory festgelegt, gibt die Funktion null zurück.

Siehe auch ` setItemEditorFactory()`.

[override virtual] void QStyledItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const

Implementiert: ` QAbstractItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const`.

Rendert den Delegaten unter Verwendung des angegebenen „ painter “ und des Stil- option s für das durch „ index “ angegebene Element.

Diese Funktion zeichnet das Element unter Verwendung der „ QStyle “ der Ansicht.

Bei der Neuimplementierung von `paint` in einer Unterklasse sollten Sie die ` initStyleOption()` verwenden, um die ` option ` auf dieselbe Weise wie die ` QStyledItemDelegate` einzurichten.

Verwenden Sie beim Zeichnen nach Möglichkeit das ` option `. Nutzen Sie insbesondere dessen Variable ` rect `, um zu entscheiden, wo gezeichnet werden soll, sowie dessen ` state `, um festzustellen, ob es aktiviert oder ausgewählt ist.

Nach dem Zeichnen sollten Sie sicherstellen, dass der „Painter“ wieder in den Zustand versetzt wird, in dem er sich beim Aufruf dieser Funktion befand. So kann es beispielsweise sinnvoll sein, vor dem Zeichnen „ QPainter::save()“ und danach „ QPainter::restore()“ aufzurufen.

Siehe auch „ QItemDelegate::paint()“, „ QStyle::drawControl()“ und „ QStyle::CE_ItemViewItem “.

[override virtual] void QStyledItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const

Umsetzt: QAbstractItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const.

Legt die Daten fest, die vom ` editor ` angezeigt und bearbeitet werden sollen, und zwar anhand des durch den Modell index en angegebenen Datenmodellelements.

Die Standardimplementierung speichert die Daten in der Benutzer-Eigenschaft des „ editor “-Widgets.

Siehe auch ` QMetaProperty::isUser()`.

void QStyledItemDelegate::setItemEditorFactory(QItemEditorFactory *factory)

Legt fest, dass der vom Element-Delegaten zu verwendende Editor-Factory der angegebene „ factory “ ist. Wenn kein Editor-Factory festgelegt ist, verwendet der Element-Delegat den Standard-Editor-Factory.

Siehe auch ` itemEditorFactory()`

[override virtual] void QStyledItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const

Implementiert neu: ` QAbstractItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const`.

Ruft Daten aus dem Widget „ editor “ ab und speichert sie im angegebenen „ model “ an der Position „ index “.

Die Standardimplementierung bezieht den im Datenmodell zu speichernden Wert aus der Benutzer-Eigenschaft des „ editor “-Widgets.

Siehe auch „ QMetaProperty::isUser()“.

[override virtual] QSize QStyledItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const

Implementiert: ` QAbstractItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const`.

Gibt die Größe zurück, die der Delegat 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 ermitteln.

Siehe auch QStyle::sizeFromContents() und QStyle::CT_ItemViewItem.

[override virtual] void QStyledItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const

Implementiert: ` QAbstractItemDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const`.

Aktualisiert das ` editor ` für das durch ` index ` angegebene Element gemäß dem angegebenen Stil ` option `.

© 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.