Auf dieser Seite

QItemDelegate Class

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

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

Eigenschaften

Öffentliche Funktionen

QItemDelegate(QObject *parent = nullptr)
virtual ~QItemDelegate()
bool hasClipping() const
QItemEditorFactory *itemEditorFactory() const
void setClipping(bool clip)
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

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

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

QItemDelegate kann verwendet werden, um benutzerdefinierte Anzeigefunktionen und Editor-Widgets für Elementansichten bereitzustellen, die auf Unterklassen von QAbstractItemView basieren. Die Verwendung eines Delegaten für diesen Zweck ermöglicht es, die Anzeige- und Bearbeitungsmechanismen unabhängig vom Modell und der Ansicht anzupassen und zu entwickeln.

Die Klasse `QItemDelegate` gehört zu den Modell-/Ansichtsklassen und ist Teil des Modell-/Ansichts-Frameworks von Qt. Beachten Sie, dass ` QStyledItemDelegate ` die Aufgabe des Zeichnens der Qt-Elementansichten übernommen hat. Wir empfehlen die Verwendung von ` QStyledItemDelegate ` beim Erstellen neuer Delegaten.

Bei der Darstellung von Elementen aus einem benutzerdefinierten Modell in einer Standardansicht reicht es oft aus, einfach sicherzustellen, dass das Modell für jeden der „ roles “, die das Erscheinungsbild der Elemente in den Ansichten bestimmen, die entsprechenden Daten zurückgibt. Der von den Standardansichten von Qt verwendete Standarddelegat nutzt diese Rolleninformationen, um Elemente in den meisten gängigen Formen darzustellen, die von Benutzern erwartet werden. Manchmal ist es jedoch erforderlich, noch mehr Kontrolle über das Erscheinungsbild der Elemente zu haben, als der Standarddelegat bieten kann.

Diese Klasse stellt Standardimplementierungen der Funktionen zum Zeichnen von Elementdaten in einer Ansicht und zum Bearbeiten von Daten aus Elementmodellen bereit. Standardimplementierungen der virtuellen Funktionen ` paint()` und ` sizeHint()`, die in ` QAbstractItemDelegate` definiert sind, werden bereitgestellt, um sicherzustellen, dass der Delegat das korrekte, von Ansichten erwartete Grundverhalten implementiert. Sie können diese Funktionen in Unterklassen neu implementieren, um das Erscheinungsbild von Elementen anzupassen.

Beim Bearbeiten von Daten in einer Elementansicht stellt QItemDelegate ein Editor-Widget bereit, das während der Bearbeitung über der Ansicht platziert wird. Editoren werden mit einer ` QItemEditorFactory` erstellt; eine standardmäßige statische Instanz, die von ` QItemEditorFactory ` bereitgestellt wird, ist in allen Element-Delegaten installiert. Sie können eine benutzerdefinierte Factory mit ` setItemEditorFactory()` festlegen oder eine neue Standard-Factory mit ` QItemEditorFactory::setDefaultFactory()` festlegen. Bearbeitet werden die Daten, die im Elementmodell unter der ` Qt::EditRole ` gespeichert sind.

Hier werden nur die Standardbearbeitungsfunktionen für Widget-basierte Delegaten neu implementiert:

  • 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 Signal „ closeEditor “ () zeigt an, dass der Benutzer die Bearbeitung der Daten abgeschlossen hat und dass das Editor-Widget zerstört werden kann.

Standardrollen und Datentypen

Der von den mit Qt gelieferten Standardansichten verwendete Standard-Delegat ordnet jeder Standardrolle (definiert durch Qt::ItemDataRole) bestimmte Datentypen zu. Modelle, die Daten in diesen Typen zurückgeben, können das Erscheinungsbild des Delegats wie in der folgenden Tabelle beschrieben beeinflussen.

Wenn der Standard-Delegat nicht den Grad an Anpassung zulässt, den Sie benötigen – sei es für Anzeigezwecke oder zur Bearbeitung von Daten –, ist es möglich, eine Unterklasse von `QItemDelegate` zu erstellen, um das gewünschte Verhalten zu implementieren.

Unterklassenbildung

Wenn Sie eine Unterklasse von `QItemDelegate` erstellen, um einen Delegaten zu definieren, der Elemente mithilfe eines benutzerdefinierten Renderers anzeigt, ist es wichtig sicherzustellen, dass der Delegat Elemente für alle erforderlichen Zustände – wie z. B. „ausgewählt“, „deaktiviert“ oder „markiert“ – angemessen darstellen kann. Die Dokumentation zur Funktion ` paint()` enthält einige Hinweise, wie dies erreicht werden kann.

Sie können benutzerdefinierte Editoren bereitstellen, indem Sie ` QItemEditorFactory` verwenden. Der folgende Code zeigt, wie ein benutzerdefinierter Editor über die Standard-Item-Editor-Factory für Delegaten verfügbar gemacht werden kann.

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

QItemEditorFactory::setDefaultFactory(editorFactory);

Nachdem die Standardfabrik festgelegt wurde, verwenden alle Standard-Element-Delegaten diese (auch die Delegaten, die vor der Festlegung der Standardfabrik erstellt wurden).

Auf diese Weise können Sie eine Unterklasse von `QItemDelegate` vermeiden, und alle Werte des angegebenen Typs (zum Beispiel ` QMetaType::QDateTime`) werden mit dem bereitgestellten Editor bearbeitet (wie ` MyFancyDateTimeEdit ` im obigen Beispiel).

Eine Alternative besteht darin, createEditor(), setEditorData(), setModelData() und updateEditorGeometry() neu zu implementieren. Dieser Vorgang wird in der Dokumentation zur Modell-Ansicht-Programmierung beschrieben.

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.

Siehe auch „Delegate-Klassen“, „ QStyledItemDelegate “ und „ QAbstractItemDelegate “.

Dokumentation zu Eigenschaften

clipping : bool

ob der Delegat die Malereignisse beschneiden soll

Diese Eigenschaft legt fest, dass der Zeichnungsbereich auf die Größe des Elements zugeschnitten wird. Der Standardwert ist „on“. Dies ist beispielsweise nützlich, wenn Bilder größer sind als das Element.

Zugriffsfunktionen:

bool hasClipping() const
void setClipping(bool clip)

Dokumentation zu den Member-Funktionen

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

Erstellt einen Item-Delegaten mit dem angegebenen ` parent`.

[virtual noexcept] QItemDelegate::~QItemDelegate()

Löscht den Item-Delegaten.

[override virtual] QWidget *QItemDelegate::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 dazu, das Erscheinungsbild des Editor-Widgets zu steuern.

Siehe auch QAbstractItemDelegate::createEditor().

[protected] void QItemDelegate::drawBackground(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const

Zeigt den Hintergrund des Elements für die angegebene „ index “ unter Verwendung der angegebenen „ painter “ und des Stils „ option “ an.

[virtual protected] void QItemDelegate::drawCheck(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, Qt::CheckState state) const

Zeigt ein Häkchen innerhalb des durch ` rect` angegebenen Rechtecks an, wobei die angegebenen Werte für ` painter ` und den Stil ` option` verwendet werden und die angegebene Farbe ` state` zum Einsatz kommt.

[virtual protected] void QItemDelegate::drawDecoration(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QPixmap &pixmap) const

Zeigt die Dekoration „ pixmap “ innerhalb des durch „ rect “ angegebenen Rechtecks unter Verwendung der angegebenen „ painter “ und des Stils „ option “ an.

[virtual protected] void QItemDelegate::drawDisplay(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect, const QString &text) const

Zeigt die Elementansicht „ text “ innerhalb des durch „ rect “ angegebenen Rechtecks unter Verwendung der angegebenen „ painter “ und des Stils „ option “ an.

[virtual protected] void QItemDelegate::drawFocus(QPainter *painter, const QStyleOptionViewItem &option, const QRect &rect) const

Zeigt den Bereich innerhalb des durch „ rect “ angegebenen Rechtecks an, wobei deutlich gemacht wird, dass dieser den Fokus hat, und verwendet dabei die angegebenen Werte „ painter “ und „style option “.

[override virtual protected] bool QItemDelegate::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 QItemDelegate::eventFilter(QObject *object, QEvent *event)

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

Einzelheiten finden Sie unter QAbstractItemDelegate::handleEditorEvent().

QItemEditorFactory *QItemDelegate::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 QItemDelegate::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 der Stil option für das durch ` index` angegebene Element.

Wenn Sie diese Funktion in einer Unterklasse neu implementieren, sollten Sie den von der Variablen ` rect ` der Option verwalteten Bereich aktualisieren, wobei Sie die Variable ` state ` der Option verwenden, um den Zustand des anzuzeigenden Elements zu ermitteln, und die Art und Weise, wie es gezeichnet wird, entsprechend anpassen.

Beispielsweise muss ein ausgewähltes Element möglicherweise anders dargestellt werden als nicht ausgewählte Elemente, wie im folgenden Code gezeigt:

if (option.state & QStyle::State_Selected)
    painter->fillRect(option.rect, option.palette.highlight());

Nach dem Zeichnen sollten Sie sicherstellen, dass der Painter in den Zustand zurückversetzt 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 ` QStyle::State`.

[override virtual] void QItemDelegate::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 QItemDelegate::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 QItemDelegate::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 „ editor “-Widget ab und speichert sie im angegebenen „ model “ unter dem Element- index.

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

Siehe auch „ QMetaProperty::isUser()“.

[override virtual] QSize QItemDelegate::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, unter Berücksichtigung der durch ` option` bereitgestellten Stilinformationen.

Beachten Sie bei der Neuimplementierung dieser Funktion, dass „ QItemDelegate “ bei Textelementen einen Rand (d. h. 2 * QStyle::PM_FocusFrameHMargin) zur Länge des Textes hinzufügt.

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

Implementiert: ` 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.

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