Auf dieser Seite

QDataWidgetMapper Class

Die Klasse „QDataWidgetMapper“ ermöglicht die Zuordnung zwischen einem Abschnitt eines Datenmodells und Widgets. Mehr...

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

Öffentliche Typen

enum SubmitPolicy { AutoSubmit, ManualSubmit }

Eigenschaften

Öffentliche Funktionen

QDataWidgetMapper(QObject *parent = nullptr)
virtual ~QDataWidgetMapper()
void addMapping(QWidget *widget, int section)
void addMapping(QWidget *widget, int section, const QByteArray &propertyName)
void clearMapping()
int currentIndex() const
QAbstractItemDelegate *itemDelegate() const
QByteArray mappedPropertyName(QWidget *widget) const
int mappedSection(QWidget *widget) const
QWidget *mappedWidgetAt(int section) const
QAbstractItemModel *model() const
Qt::Orientation orientation() const
void removeMapping(QWidget *widget)
QModelIndex rootIndex() const
void setItemDelegate(QAbstractItemDelegate *delegate)
void setModel(QAbstractItemModel *model)
void setOrientation(Qt::Orientation aOrientation)
void setRootIndex(const QModelIndex &index)
void setSubmitPolicy(QDataWidgetMapper::SubmitPolicy policy)
QDataWidgetMapper::SubmitPolicy submitPolicy() const

Öffentliche Slots

void revert()
virtual void setCurrentIndex(int index)
void setCurrentModelIndex(const QModelIndex &index)
bool submit()
void toFirst()
void toLast()
void toNext()
void toPrevious()

Signale

void currentIndexChanged(int index)

Ausführliche Beschreibung

Mit QDataWidgetMapper lassen sich datengesteuerte Widgets erstellen, indem diese Abschnitten eines Elementmodells zugeordnet werden. Ein Abschnitt ist eine Spalte des Modells, wenn die Ausrichtung horizontal ist (Standardeinstellung), andernfalls eine Zeile.

Jedes Mal, wenn sich der aktuelle Index ändert, wird jedes Widget mit Daten aus dem Modell über die Eigenschaft aktualisiert, die bei der Zuordnung angegeben wurde. Wenn der Benutzer den Inhalt eines Widgets bearbeitet, werden die Änderungen über dieselbe Eigenschaft gelesen und wieder in das Modell geschrieben. Standardmäßig wird die „ user property “ jedes Widgets verwendet, um Daten zwischen dem Modell und dem Widget zu übertragen. Seit Qt 4.3 ermöglicht eine zusätzliche Funktion „ addMapping()“ die Verwendung einer benannten Eigenschaft anstelle der standardmäßigen „user property“.

Es ist möglich, einen Item-Delegaten festzulegen, um benutzerdefinierte Widgets zu unterstützen. Standardmäßig wird „ QStyledItemDelegate “ verwendet, um das Modell mit den Widgets zu synchronisieren.

Nehmen wir an, wir haben ein Item-Modell namens „ model “ mit folgendem Inhalt:

1Qt NorwayOslo
2Qt AustralienBrisbane
3Qt USAPalo Alto
4Qt ChinaPeking
5Qt DeutschlandBerlin

Der folgende Code ordnet die Spalten des Modells den Widgets „ mySpinBox “, „ myLineEdit “ und „ myCountryChooser “ zu:

QDataWidgetMapper *mapper = new QDataWidgetMapper;
mapper->setModel(model);
mapper->addMapping(mySpinBox, 0);
mapper->addMapping(myLineEdit, 1);
mapper->addMapping(myCountryChooser, 2);
mapper->toFirst();

Nach dem Aufruf von ` toFirst()` zeigt ` mySpinBox ` den Wert ` 1` an, ` myLineEdit ` zeigt ` Qt Norway ` an und ` myCountryChooser ` zeigt ` Oslo` an. Die Navigationsfunktionen ` toFirst()`, ` toNext()`, ` toPrevious()`, ` toLast()` und ` setCurrentIndex()` können verwendet werden, um im Modell zu navigieren und die Widgets mit Inhalten aus dem Modell zu aktualisieren.

Die Funktion ` setRootIndex()` ermöglicht es, ein bestimmtes Element in einem Modell als Stammindex festzulegen – die untergeordneten Elemente dieses Elements werden den entsprechenden Widgets in der Benutzeroberfläche zugeordnet.

QDataWidgetMapper unterstützt zwei Übermittlungsrichtlinien: „ AutoSubmit “ und „ ManualSubmit “. „ AutoSubmit “ aktualisiert das Modell, sobald das aktuelle Widget den Fokus verliert; „ ManualSubmit “ aktualisiert das Modell erst, wenn „ submit()“ aufgerufen wird. „ ManualSubmit “ ist nützlich, wenn ein Dialogfeld angezeigt wird, in dem der Benutzer alle Änderungen rückgängig machen kann. Außerdem werden andere Ansichten, die das Modell anzeigen, erst aktualisiert, wenn der Benutzer alle Änderungen abgeschlossen und übermittelt hat.

Beachten Sie, dass QDataWidgetMapper externe Änderungen nachverfolgt. Wenn der Inhalt des Modells in einem anderen Modul der Anwendung aktualisiert wird, werden auch die Widgets aktualisiert.

Siehe auch QAbstractItemModel und QAbstractItemDelegate.

Dokumentation zu Mitgliedstypen

enum QDataWidgetMapper::SubmitPolicy

Diese Enumeration beschreibt die möglichen Übermittlungsrichtlinien, die ein „ QDataWidgetMapper “ unterstützt.

KonstanteWertBeschreibung
QDataWidgetMapper::AutoSubmit0Immer wenn ein Widget den Fokus verliert, wird der aktuelle Wert des Widgets dem Elementmodell zugewiesen.
QDataWidgetMapper::ManualSubmit1Das Modell wird erst aktualisiert, wenn ` submit()` aufgerufen wird.

Dokumentation zur Eigenschaft

currentIndex : int

Diese Eigenschaft enthält die aktuelle Zeile oder Spalte

Die Widgets werden bei horizontaler Ausrichtung (Standard) mit Daten aus der Zeile unter index gefüllt, andernfalls mit Daten aus der Spalte unter index.

Zugriffsfunktionen:

int currentIndex() const
virtual void setCurrentIndex(int index)

Benachrichtigungssignal:

void currentIndexChanged(int index)

Siehe auch setCurrentModelIndex(), toFirst(), toNext(), toPrevious() und toLast().

orientation : Qt::Orientation

Diese Eigenschaft gibt die Ausrichtung des Modells an

Wenn die Ausrichtung „ Qt::Horizontal “ (Standard) ist, wird ein Widget einer Spalte eines Datenmodells zugeordnet. Das Widget wird mit den Daten des Modells aus der zugeordneten Spalte und der Zeile gefüllt, auf die „ currentIndex()“ verweist.

Verwenden Sie „ Qt::Horizontal “ für tabellarische Daten, die wie folgt aussehen:

1Qt NorwegenOslo
2Qt AustralienBrisbane
3Qt USASilicon Valley
4Qt ChinaPeking
5Qt DeutschlandBerlin

Wenn die Ausrichtung auf „ Qt::Vertical “ gesetzt ist, wird ein Widget einer Zeile zugeordnet. Der Aufruf von ` setCurrentIndex()` ändert die aktuelle Spalte. Das Widget wird mit den Daten des Modells aus der zugeordneten Zeile und der Spalte gefüllt, auf die ` currentIndex()` verweist.

Verwenden Sie „ Qt::Vertical “ für tabellarische Daten, die wie folgt aussehen:

12345
Qt NorwegenQt AustralienQt USAQt ChinaQt Deutschland
OsloBrisbaneSilicon ValleyPekingBerlin

Durch Ändern der Ausrichtung werden alle bestehenden Zuordnungen gelöscht.

Zugriffsfunktionen:

Qt::Orientation orientation() const
void setOrientation(Qt::Orientation aOrientation)

submitPolicy : SubmitPolicy

Diese Eigenschaft enthält die aktuelle Übermittlungsrichtlinie

Durch das Ändern der aktuellen Absendungsrichtlinie werden alle Widgets auf die aktuellen Daten aus dem Modell zurückgesetzt.

Zugriffsfunktionen:

QDataWidgetMapper::SubmitPolicy submitPolicy() const
void setSubmitPolicy(QDataWidgetMapper::SubmitPolicy policy)

Dokumentation der Mitgliedsfunktionen

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

Erstellt ein neues `QDataWidgetMapper`-Objekt mit dem übergeordneten Objekt ` parent`. Standardmäßig ist die Ausrichtung horizontal und die Übermittlungsrichtlinie lautet ` AutoSubmit`.

Siehe auch setOrientation() und setSubmitPolicy().

[virtual noexcept] QDataWidgetMapper::~QDataWidgetMapper()

Löscht das Objekt.

void QDataWidgetMapper::addMapping(QWidget *widget, int section)

Fügt eine Zuordnung zwischen einem „ widget “ und einem „ section “ aus dem Modell hinzu. „ section “ ist im Modell eine Spalte, wenn die Ausrichtung horizontal ist (Standardeinstellung), andernfalls eine Zeile.

Für das folgende Beispiel nehmen wir ein Modell „ myModel “ an, das zwei Spalten enthält: Die erste Spalte enthält die Namen der Personen in einer Gruppe, die zweite Spalte ihr Alter. Die erste Spalte wird der „ QLineEdit “ ( nameLineEdit) zugeordnet, die zweite der „ QSpinBox “ ( ageSpinBox):

QDataWidgetMapper *mapper = new QDataWidgetMapper;
mapper->setModel(myModel);
mapper->addMapping(nameLineEdit, 0);
mapper->addMapping(ageSpinBox, 1);

Hinweise:

  • Wenn das Widget „ widget “ bereits einem Abschnitt zugeordnet ist, wird die alte Zuordnung durch die neue ersetzt.
  • Es sind nur Eins-zu-Eins-Zuordnungen zwischen Abschnitten und Widgets zulässig. Es ist nicht möglich, einen einzelnen Abschnitt mehreren Widgets zuzuordnen oder ein einzelnes Widget mehreren Abschnitten zuzuordnen.

Siehe auch removeMapping(), mappedSection() und clearMapping().

void QDataWidgetMapper::addMapping(QWidget *widget, int section, const QByteArray &propertyName)

Im Wesentlichen identisch mit addMapping(), bietet jedoch zusätzlich die Möglichkeit, die zu verwendende Eigenschaft über propertyName anzugeben.

Siehe auch ` addMapping()`.

void QDataWidgetMapper::clearMapping()

Löscht alle Zuordnungen.

Siehe auch addMapping() und removeMapping().

[signal] void QDataWidgetMapper::currentIndexChanged(int index)

Dieses Signal wird ausgelöst, nachdem sich der aktuelle Index geändert hat und alle Widgets mit neuen Daten gefüllt wurden. index ist der neue aktuelle Index.

Hinweis: Notifier -Signal für die Eigenschaft ` currentIndex`.

Siehe auch „ currentIndex()“ und „ setCurrentIndex()“.

QAbstractItemDelegate *QDataWidgetMapper::itemDelegate() const

Gibt den Delegaten des aktuellen Elements zurück.

Siehe auch ` setItemDelegate()`.

QByteArray QDataWidgetMapper::mappedPropertyName(QWidget *widget) const

Gibt den Namen der Eigenschaft zurück, die beim Zuordnen von Daten zur angegebenen „ widget “ verwendet wird.

Siehe auch mappedSection(), addMapping() und removeMapping().

int QDataWidgetMapper::mappedSection(QWidget *widget) const

Gibt den Abschnitt zurück, dem das „ widget “ zugeordnet ist, oder -1, falls das Widget nicht zugeordnet ist.

Siehe auch „ addMapping()“ und „ removeMapping()“.

QWidget *QDataWidgetMapper::mappedWidgetAt(int section) const

Gibt das Widget zurück, das unter „ section “ zugeordnet ist, oder 0, wenn in diesem Abschnitt kein Widget zugeordnet ist.

Siehe auch addMapping() und removeMapping().

QAbstractItemModel *QDataWidgetMapper::model() const

Gibt das aktuelle Modell zurück.

Siehe auch ` setModel()`.

void QDataWidgetMapper::removeMapping(QWidget *widget)

Entfernt die Zuordnung für die angegebene widget.

Siehe auch addMapping() und clearMapping().

[slot] void QDataWidgetMapper::revert()

Füllt alle Widgets mit den aktuellen Daten des Modells neu. Alle noch nicht gesendeten Änderungen gehen dabei verloren.

Siehe auch submit() und setSubmitPolicy().

QModelIndex QDataWidgetMapper::rootIndex() const

Gibt den aktuellen Stammindex zurück.

Siehe auch „ setRootIndex()“.

[slot] void QDataWidgetMapper::setCurrentModelIndex(const QModelIndex &index)

Setzt den aktuellen Index auf die Zeile des index, wenn die Ausrichtung horizontal ist (Standard), andernfalls auf die Spalte des index.

Ruft intern ` setCurrentIndex()` auf. Dieser Komfort-Slot kann mit dem Signal ` currentRowChanged()` oder ` currentColumnChanged()` des ` selection model` einer anderen Ansicht verbunden werden.

Das folgende Beispiel veranschaulicht, wie alle Widgets mit neuen Daten aktualisiert werden, sobald sich die Auswahl eines „ QTableView “ namens „ myTableView “ ändert:

QDataWidgetMapper *mapper = new QDataWidgetMapper;
connect(myTableView->selectionModel(), &QItemSelectionModel::currentRowChanged,
        mapper, &QDataWidgetMapper::setCurrentModelIndex);

Siehe auch ` currentIndex()` ().

void QDataWidgetMapper::setItemDelegate(QAbstractItemDelegate *delegate)

Legt den Element-Delegaten auf „ delegate “ fest. Der Delegat wird verwendet, um Daten aus dem Modell in das Widget und aus dem Widget in das Modell zu schreiben, und zwar mithilfe von „ QAbstractItemDelegate::setEditorData()“ und „ QAbstractItemDelegate::setModelData()“.

Ein eventuell vorhandener Delegat wird entfernt, jedoch nicht gelöscht. QDataWidgetMapper übernimmt nicht die Eigentümerschaft an delegate.

Der Delegat entscheidet zudem mithilfe von ` QAbstractItemDelegate::commitData()` und ` QAbstractItemDelegate::closeEditor()`, wann Daten angewendet und wann der Editor geändert werden soll.

Warnung: Sie sollten nicht dieselbe Instanz eines Delegaten zwischen Widget-Mappern oder Ansichten gemeinsam nutzen. Dies kann zu fehlerhaftem oder nicht intuitivem Bearbeitungsverhalten führen, da jede mit einem bestimmten Delegaten verbundene Ansicht das Signal „ closeEditor()“ empfangen und versuchen könnte, auf einen bereits geschlossenen Editor zuzugreifen, ihn zu ändern oder zu schließen.

Siehe auch ` itemDelegate()`.

void QDataWidgetMapper::setModel(QAbstractItemModel *model)

Setzt das aktuelle Modell auf „ model “. Wenn zuvor ein anderes Modell festgelegt war, werden alle Zuordnungen zu diesem alten Modell gelöscht.

Siehe auch ` model()`.

void QDataWidgetMapper::setRootIndex(const QModelIndex &index)

Setzt das Stammelement auf „ index “. Dies kann verwendet werden, um einen Zweig eines Baums anzuzeigen. Übergeben Sie einen ungültigen Modellindex, um den obersten Zweig anzuzeigen.

Siehe auch rootIndex().

[slot] bool QDataWidgetMapper::submit()

Übermittelt alle Änderungen aus den zugeordneten Widgets an das Modell.

Für jeden zugeordneten Abschnitt liest der Item-Delegat den aktuellen Wert aus dem Widget aus und setzt ihn im Modell. Abschließend wird die Methode „ submit()“ des Modells aufgerufen.

Gibt ` true ` zurück, wenn alle Werte übermittelt wurden, andernfalls `false`.

Hinweis: Bei Datenbankmodellen kann ` QSqlQueryModel::lastError()` verwendet werden, um den letzten Fehler abzurufen.

Siehe auch ` revert()` und ` setSubmitPolicy()`.

[slot] void QDataWidgetMapper::toFirst()

Füllt die Widgets mit Daten aus der ersten Zeile des Modells, wenn die Ausrichtung horizontal ist (Standardeinstellung), andernfalls mit Daten aus der ersten Spalte.

Dies entspricht dem Aufruf von ` setCurrentIndex(0)`.

Siehe auch „ toLast()“ und „ setCurrentIndex()“.

[slot] void QDataWidgetMapper::toLast()

Füllt die Widgets mit Daten aus der letzten Zeile des Modells, wenn die Ausrichtung horizontal ist (Standard), andernfalls mit Daten aus der letzten Spalte.

Ruft intern ` setCurrentIndex()` auf.

Siehe auch ` toFirst()` und ` setCurrentIndex()`.

[slot] void QDataWidgetMapper::toNext()

Füllt die Widgets mit Daten aus der nächsten Zeile des Modells, wenn die Ausrichtung horizontal ist (Standardeinstellung), andernfalls mit Daten aus der nächsten Spalte.

Ruft intern ` setCurrentIndex()` auf. Führt keine Aktion aus, wenn im Modell keine nächste Zeile vorhanden ist.

Siehe auch ` toPrevious()` und ` setCurrentIndex()`.

[slot] void QDataWidgetMapper::toPrevious()

Füllt die Widgets mit Daten aus der vorherigen Zeile des Modells, wenn die Ausrichtung horizontal ist (Standardeinstellung), andernfalls mit Daten aus der vorherigen Spalte.

Ruft intern ` setCurrentIndex()` auf. Führt keine Aktion aus, wenn im Modell keine vorherige Zeile vorhanden ist.

Siehe auch ` toNext()` und ` setCurrentIndex()`.

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