QAbstractItemModel Class
Die Klasse QAbstractItemModel stellt die abstrakte Schnittstelle für Elementmodellklassen zur Verfügung. Mehr...
Kopfzeile: | #include <QAbstractItemModel> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake: | QT += core |
Vererbt: | QObject |
Vererbt von: | QAbstractItemModelReplica, QAbstractListModel, QAbstractProxyModel, QAbstractTableModel, QConcatenateTablesProxyModel, QFileSystemModel, QHelpContentModel, QPdfBookmarkModel, und QStandardItemModel |
Öffentliche Typen
enum class | CheckIndexOption { NoOption, IndexIsValid, DoNotUseParent, ParentIsInvalid } |
flags | CheckIndexOptions |
enum | LayoutChangeHint { NoLayoutChangeHint, VerticalSortHint, HorizontalSortHint } |
Öffentliche Funktionen
QAbstractItemModel(QObject *parent = nullptr) | |
virtual | ~QAbstractItemModel() |
virtual QModelIndex | buddy(const QModelIndex &index) const |
virtual bool | canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const |
virtual bool | canFetchMore(const QModelIndex &parent) const |
bool | checkIndex(const QModelIndex &index, QAbstractItemModel::CheckIndexOptions options = CheckIndexOption::NoOption) const |
(since 6.0) virtual bool | clearItemData(const QModelIndex &index) |
virtual int | columnCount(const QModelIndex &parent = QModelIndex()) const = 0 |
virtual QVariant | data(const QModelIndex &index, int role = Qt::DisplayRole) const = 0 |
virtual bool | dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) |
virtual void | fetchMore(const QModelIndex &parent) |
virtual Qt::ItemFlags | flags(const QModelIndex &index) const |
virtual bool | hasChildren(const QModelIndex &parent = QModelIndex()) const |
bool | hasIndex(int row, int column, const QModelIndex &parent = QModelIndex()) const |
virtual QVariant | headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const |
virtual QModelIndex | index(int row, int column, const QModelIndex &parent = QModelIndex()) const = 0 |
bool | insertColumn(int column, const QModelIndex &parent = QModelIndex()) |
virtual bool | insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) |
bool | insertRow(int row, const QModelIndex &parent = QModelIndex()) |
virtual bool | insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) |
virtual QMap<int, QVariant> | itemData(const QModelIndex &index) const |
virtual QModelIndexList | match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const |
virtual QMimeData * | mimeData(const QModelIndexList &indexes) const |
virtual QStringList | mimeTypes() const |
bool | moveColumn(const QModelIndex &sourceParent, int sourceColumn, const QModelIndex &destinationParent, int destinationChild) |
virtual bool | moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count, const QModelIndex &destinationParent, int destinationChild) |
bool | moveRow(const QModelIndex &sourceParent, int sourceRow, const QModelIndex &destinationParent, int destinationChild) |
virtual bool | moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild) |
(since 6.0) virtual void | multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const |
virtual QModelIndex | parent(const QModelIndex &index) const = 0 |
bool | removeColumn(int column, const QModelIndex &parent = QModelIndex()) |
virtual bool | removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) |
bool | removeRow(int row, const QModelIndex &parent = QModelIndex()) |
virtual bool | removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) |
virtual QHash<int, QByteArray> | roleNames() const |
virtual int | rowCount(const QModelIndex &parent = QModelIndex()) const = 0 |
virtual bool | setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) |
virtual bool | setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) |
virtual bool | setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles) |
virtual QModelIndex | sibling(int row, int column, const QModelIndex &index) const |
virtual void | sort(int column, Qt::SortOrder order = Qt::AscendingOrder) |
virtual QSize | span(const QModelIndex &index) const |
virtual Qt::DropActions | supportedDragActions() const |
virtual Qt::DropActions | supportedDropActions() const |
Öffentliche Slots
Signale
void | columnsAboutToBeInserted(const QModelIndex &parent, int first, int last) |
void | columnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn) |
void | columnsAboutToBeRemoved(const QModelIndex &parent, int first, int last) |
void | columnsInserted(const QModelIndex &parent, int first, int last) |
void | columnsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn) |
void | columnsRemoved(const QModelIndex &parent, int first, int last) |
void | dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList<int> &roles = QList<int>()) |
void | headerDataChanged(Qt::Orientation orientation, int first, int last) |
void | layoutAboutToBeChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint) |
void | layoutChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint) |
void | modelAboutToBeReset() |
void | modelReset() |
void | rowsAboutToBeInserted(const QModelIndex &parent, int start, int end) |
void | rowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow) |
void | rowsAboutToBeRemoved(const QModelIndex &parent, int first, int last) |
void | rowsInserted(const QModelIndex &parent, int first, int last) |
void | rowsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow) |
void | rowsRemoved(const QModelIndex &parent, int first, int last) |
Geschützte Funktionen
void | beginInsertColumns(const QModelIndex &parent, int first, int last) |
void | beginInsertRows(const QModelIndex &parent, int first, int last) |
bool | beginMoveColumns(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild) |
bool | beginMoveRows(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild) |
void | beginRemoveColumns(const QModelIndex &parent, int first, int last) |
void | beginRemoveRows(const QModelIndex &parent, int first, int last) |
void | beginResetModel() |
void | changePersistentIndex(const QModelIndex &from, const QModelIndex &to) |
void | changePersistentIndexList(const QModelIndexList &from, const QModelIndexList &to) |
QModelIndex | createIndex(int row, int column, const void *ptr = nullptr) const |
QModelIndex | createIndex(int row, int column, quintptr id) const |
void | endInsertColumns() |
void | endInsertRows() |
void | endMoveColumns() |
void | endMoveRows() |
void | endRemoveColumns() |
void | endRemoveRows() |
void | endResetModel() |
QModelIndexList | persistentIndexList() const |
Geschützte Steckplätze
virtual void | resetInternalData() |
Detaillierte Beschreibung
Die Klasse QAbstractItemModel definiert die Standardschnittstelle, die Item-Modelle verwenden müssen, um mit anderen Komponenten in der Model/View-Architektur interagieren zu können. Sie soll nicht direkt instanziiert werden. Stattdessen sollten Sie sie unterklassifizieren, um neue Modelle zu erstellen.
Die Klasse QAbstractItemModel ist eine der Model/View-Klassen und ist Teil des Model/View-Frameworks von Qt. Sie kann als zugrunde liegendes Datenmodell für die Elemente der Elementansicht in QML oder die Elementansichtsklassen im Modul Qt Widgets verwendet werden.
Wenn Sie ein Modell benötigen, das Sie mit einer Elementansicht wie dem Listenansichtselement von QML oder den C++-Widgets QListView oder QTableView verwenden können, sollten Sie in Erwägung ziehen, QAbstractListModel oder QAbstractTableModel anstelle dieser Klasse zu subklassifizieren.
Das zugrundeliegende Datenmodell wird den Ansichten und Delegaten als eine Hierarchie von Tabellen angezeigt. Wenn Sie die Hierarchie nicht verwenden, ist das Modell eine einfache Tabelle mit Zeilen und Spalten. Jedes Element hat einen eindeutigen Index, der durch ein QModelIndex angegeben wird.
Jedes Datenelement, auf das über ein Modell zugegriffen werden kann, hat einen zugehörigen Modellindex. Sie können diesen Modellindex mit der Funktion index() erhalten. Jeder Index kann einen sibling()-Index haben; untergeordnete Elemente haben einen parent()-Index.
Jedem Element ist eine Reihe von Datenelementen zugeordnet, die durch Angabe einer Rolle (siehe Qt::ItemDataRole) in der Funktion data() des Modells abgerufen werden können. Die Daten für alle verfügbaren Rollen können gleichzeitig mit der Funktion itemData() abgerufen werden.
Die Daten für jede Rolle werden mit einer bestimmten Qt::ItemDataRole gesetzt. Die Daten für einzelne Rollen werden mit setData() einzeln gesetzt, oder sie können mit setItemData() für alle Rollen gesetzt werden.
Elemente können mit flags() abgefragt werden (siehe Qt::ItemFlag), um festzustellen, ob sie ausgewählt, gezogen oder auf andere Weise manipuliert werden können.
Wenn ein Element Unterobjekte hat, gibt hasChildren() true
für den entsprechenden Index zurück.
Das Modell hat eine rowCount() und eine columnCount() für jede Ebene der Hierarchie. Zeilen und Spalten können mit insertRows(), insertColumns(), removeRows() und removeColumns() eingefügt und entfernt werden.
Das Modell gibt Signale aus, um Änderungen anzuzeigen. So wird beispielsweise dataChanged() immer dann ausgegeben, wenn die vom Modell bereitgestellten Daten geändert werden. Änderungen an den vom Modell gelieferten Kopfzeilen führen zur Ausgabe von headerDataChanged(). Wenn sich die Struktur der zugrundeliegenden Daten ändert, kann das Modell layoutChanged() ausgeben, um allen angeschlossenen Ansichten mitzuteilen, dass sie alle angezeigten Elemente unter Berücksichtigung der neuen Struktur neu anzeigen sollen.
Die über das Modell verfügbaren Elemente können mit der Funktion match() nach bestimmten Daten durchsucht werden.
Um das Modell zu sortieren, können Sie sort() verwenden.
Unterklassenbildung
Hinweis: Einige allgemeine Richtlinien für die Subklassifizierung von Modellen finden Sie in der Model Subclassing Reference.
Wenn Sie QAbstractItemModel subclassing, müssen Sie zumindest index(), parent(), rowCount(), columnCount() und data() implementieren. Diese Funktionen werden in allen schreibgeschützten Modellen verwendet und bilden die Grundlage für editierbare Modelle.
Sie können auch hasChildren() neu implementieren, um ein spezielles Verhalten für Modelle bereitzustellen, bei denen die Implementierung von rowCount() teuer ist. Dies ermöglicht es Modellen, die Menge der von Ansichten angeforderten Daten zu beschränken, und kann als eine Möglichkeit verwendet werden, um eine faule Population von Modelldaten zu implementieren.
Um die Bearbeitung in Ihrem Modell zu ermöglichen, müssen Sie auch setData() implementieren und flags() reimplementieren, um sicherzustellen, dass ItemIsEditable
zurückgegeben wird. Sie können auch headerData() und setHeaderData() neu implementieren, um zu steuern, wie die Kopfzeilen für Ihr Modell dargestellt werden.
Die Signale dataChanged() und headerDataChanged() müssen explizit ausgegeben werden, wenn die Funktionen setData() bzw. setHeaderData() reimplementiert werden.
Benutzerdefinierte Modelle müssen Modellindizes erstellen, die von anderen Komponenten verwendet werden können. Dazu rufen Sie createIndex() mit geeigneten Zeilen- und Spaltennummern für das Element und einem Bezeichner für dieses Element auf, entweder als Zeiger oder als Ganzzahlwert. Die Kombination dieser Werte muss für jedes Element eindeutig sein. Benutzerdefinierte Modelle verwenden diese eindeutigen Bezeichner in der Regel in anderen reimplementierten Funktionen, um Elementdaten abzurufen und auf Informationen über die Eltern und Kinder des Elements zuzugreifen. Siehe das Simple Tree Model Beispiel für weitere Informationen über eindeutige Bezeichner.
Es ist nicht notwendig, jede in Qt::ItemDataRole definierte Rolle zu unterstützen. Je nach Art der in einem Modell enthaltenen Daten kann es sinnvoll sein, die Funktion data() nur zu implementieren, um gültige Informationen für einige der gängigsten Rollen zurückzugeben. Die meisten Modelle bieten zumindest eine textuelle Darstellung der Artikeldaten für die Qt::DisplayRole, und gut funktionierende Modelle sollten auch gültige Informationen für die Qt::ToolTipRole und Qt::WhatsThisRole liefern. Durch die Unterstützung dieser Rollen können Modelle mit Standard-Qt-Ansichten verwendet werden. Für einige Modelle, die hochspezialisierte Daten verarbeiten, kann es jedoch angemessen sein, Daten nur für benutzerdefinierte Rollen bereitzustellen.
Modelle, die Schnittstellen zu größenveränderlichen Datenstrukturen anbieten, können Implementierungen von insertRows(), removeRows(), insertColumns() und removeColumns() bereitstellen. Bei der Implementierung dieser Funktionen ist es wichtig, alle angeschlossenen Sichten über Änderungen an den Dimensionen des Modells sowohl vor als auch nach deren Auftreten zu informieren:
- Eine Implementierung von insertRows() muss beginInsertRows() aufrufen , bevor neue Zeilen in die Datenstruktur eingefügt werden, und endInsertRows() unmittelbar danach.
- Eine Implementierung von insertColumns() muss beginInsertColumns() aufrufen , bevor neue Spalten in die Datenstruktur eingefügt werden, und endInsertColumns() unmittelbar danach.
- Eine removeRows()-Implementierung muss beginRemoveRows() aufrufen , bevor die Zeilen aus der Datenstruktur entfernt werden, und endRemoveRows() unmittelbar danach.
- Eine Implementierung von removeColumns() muss beginRemoveColumns() aufrufen , bevor die Spalten aus der Datenstruktur entfernt werden, und endRemoveColumns() unmittelbar danach.
Die privaten Signale, die diese Funktionen ausgeben, geben den angeschlossenen Komponenten die Möglichkeit, Maßnahmen zu ergreifen, bevor die Daten nicht mehr verfügbar sind. Die Kapselung der Einfüge- und Entnahmeoperationen mit diesen begin- und end-Funktionen ermöglicht es dem Modell auch, persistent model indexes korrekt zu verwalten. Wenn Sie möchten, dass Selektionen richtig gehandhabt werden, müssen Sie sicherstellen, dass Sie diese Funktionen aufrufen. Wenn Sie ein Element mit untergeordneten Elementen einfügen oder entfernen, müssen Sie diese Funktionen nicht für die untergeordneten Elemente aufrufen. Mit anderen Worten: Das übergeordnete Element kümmert sich um seine untergeordneten Elemente.
Um Modelle zu erstellen, die schrittweise aufgefüllt werden, können Sie fetchMore() und canFetchMore() neu implementieren. Wenn die Neuimplementierung von fetchMore() dem Modell Zeilen hinzufügt, müssen beginInsertRows() und endInsertRows() aufgerufen werden.
Thread-Sicherheit
Da QAbstractItemModel eine Unterklasse von QObject ist, ist es nicht thread-safe. Jede modellbezogene API von QAbstractItemModel sollte nur von dem Thread aufgerufen werden, in dem sich das Modellobjekt befindet. Wenn das QAbstractItemModel mit einer Ansicht verbunden ist, bedeutet dies den GUI-Thread, da sich die Ansicht dort befindet und das Modell vom GUI-Thread aus aufgerufen wird. Die Verwendung eines Hintergrund-Threads zum Auffüllen oder Ändern des Inhalts eines Modells ist möglich, erfordert aber Vorsicht, da der Hintergrund-Thread keine modellbezogene API direkt aufrufen kann. Stattdessen sollten Sie die Aktualisierungen in eine Warteschlange stellen und sie im Hauptthread anwenden. Dies kann mit Warteschlangenverbindungen geschehen.
Siehe auch Model Classes, Model Subclassing Reference, QModelIndex, QAbstractItemView, Using drag and drop with item views, Simple Tree Model Example, Editable Tree Model Example, and Fetch More Example.
Dokumentation der Membertypen
enum class QAbstractItemModel::CheckIndexOption
flags QAbstractItemModel::CheckIndexOptions
Diese Aufzählung kann verwendet werden, um die von QAbstractItemModel::checkIndex() durchgeführten Prüfungen zu steuern.
Konstante | Wert | Beschreibung |
---|---|---|
QAbstractItemModel::CheckIndexOption::NoOption | 0x0000 | Es sind keine Prüfoptionen angegeben. |
QAbstractItemModel::CheckIndexOption::IndexIsValid | 0x0001 | Der an QAbstractItemModel::checkIndex() übergebene Modellindex wird als gültiger Modellindex geprüft. |
QAbstractItemModel::CheckIndexOption::DoNotUseParent | 0x0002 | Führt keine Prüfung der Verwendung des übergeordneten Indexes durch, der an QAbstractItemModel::checkIndex() übergeben wurde. |
QAbstractItemModel::CheckIndexOption::ParentIsInvalid | 0x0004 | Der Elternteil des an QAbstractItemModel::checkIndex() übergebenen Modellindexes wird auf einen ungültigen Modellindex geprüft. Wenn sowohl diese Option als auch DoNotUseParent angegeben sind, wird diese Option ignoriert. |
Der Typ CheckIndexOptions ist ein Typedef für QFlags<CheckIndexOption>. Er speichert eine OR-Kombination von CheckIndexOption-Werten.
enum QAbstractItemModel::LayoutChangeHint
Diese Aufzählung beschreibt die Art und Weise, wie das Modell das Layout ändert.
Konstante | Wert | Beschreibung |
---|---|---|
QAbstractItemModel::NoLayoutChangeHint | 0 | Es ist kein Hinweis verfügbar. |
QAbstractItemModel::VerticalSortHint | 1 | Zeilen werden sortiert. |
QAbstractItemModel::HorizontalSortHint | 2 | Spalten werden sortiert. |
Beachten Sie, dass VerticalSortHint und HorizontalSortHint die Bedeutung haben, dass Elemente innerhalb desselben übergeordneten Elements verschoben werden, nicht zu einem anderen übergeordneten Element im Modell verschoben und nicht heraus- oder hineingefiltert werden.
Dokumentation der Mitgliedsfunktionen
[explicit]
QAbstractItemModel::QAbstractItemModel(QObject *parent = nullptr)
Konstruiert ein abstraktes Objektmodell mit dem angegebenen parent.
[virtual noexcept]
QAbstractItemModel::~QAbstractItemModel()
Zerstört das abstrakte Objektmodell.
[protected]
void QAbstractItemModel::beginInsertColumns(const QModelIndex &parent, int first, int last)
Beginnt einen Spalteneinfügevorgang.
Wenn Sie insertColumns() in einer Unterklasse neu implementieren, müssen Sie diese Funktion aufrufen , bevor Sie Daten in den zugrunde liegenden Datenspeicher des Modells einfügen.
Der Index parent entspricht dem übergeordneten Element, in das die neuen Spalten eingefügt werden; first und last sind die Spaltennummern, die die neuen Spalten haben werden, nachdem sie eingefügt worden sind.
![]() | Geben Sie die erste und die letzte Spaltennummer für die Spanne von Spalten an, die Sie in ein Element in einem Modell einfügen möchten. Wie im Diagramm dargestellt, fügen wir beispielsweise drei Spalten vor Spalte 4 ein. first ist also 4 und last ist 6: beginInsertColumns(parent, 4, 6); Dadurch werden die drei neuen Spalten als Spalten 4, 5 und 6 eingefügt. |
![]() | Um Spalten anzuhängen, fügen Sie sie nach der letzten Spalte ein. Wie im Diagramm dargestellt, fügen wir beispielsweise drei Spalten an eine Sammlung von sechs vorhandenen Spalten an (die in Spalte 5 enden), so dass first 6 und last 8 ist: beginInsertColumns(parent, 6, 8); Dadurch werden die beiden neuen Spalten als Spalten 6, 7 und 8 angefügt. |
Hinweis: Diese Funktion gibt das Signal columnsAboutToBeInserted() aus, das die angeschlossenen Ansichten (oder Proxys) verarbeiten müssen, bevor die Daten eingefügt werden. Andernfalls können die Ansichten in einem ungültigen Zustand enden.
Siehe auch endInsertColumns().
[protected]
void QAbstractItemModel::beginInsertRows(const QModelIndex &parent, int first, int last)
Beginnt einen Zeileneinfügevorgang.
Wenn Sie insertRows() in einer Unterklasse neu implementieren, müssen Sie diese Funktion aufrufen , bevor Sie Daten in den zugrunde liegenden Datenspeicher des Modells einfügen.
Der Index parent entspricht dem übergeordneten Element, in das die neuen Zeilen eingefügt werden; first und last sind die Zeilennummern, die die neuen Zeilen nach dem Einfügen haben werden.
![]() | Geben Sie die erste und letzte Zeilennummer für die Zeilenspanne an, die Sie in einen Artikel in einem Modell einfügen möchten. Wie im Diagramm dargestellt, fügen wir beispielsweise drei Zeilen vor Zeile 2 ein; first ist also 2 und last ist 4: beginInsertRows(parent, 2, 4); Dadurch werden die drei neuen Zeilen als Zeile 2, 3 und 4 eingefügt. |
![]() | Um Zeilen anzuhängen, fügen Sie sie nach der letzten Zeile ein. Wie im Diagramm dargestellt, werden beispielsweise zwei Zeilen an eine Sammlung von 4 vorhandenen Zeilen (die in Zeile 3 enden) angehängt, so dass first die Zeile 4 und last die Zeile 5 ist: beginInsertRows(parent, 4, 5); Damit werden die beiden neuen Zeilen als Zeile 4 und 5 angefügt. |
Hinweis: Diese Funktion gibt das Signal rowsAboutToBeInserted() aus, das die angeschlossenen Ansichten (oder Proxys) verarbeiten müssen, bevor die Daten eingefügt werden. Andernfalls können die Ansichten in einem ungültigen Zustand enden.
Siehe auch endInsertRows().
[protected]
bool QAbstractItemModel::beginMoveColumns(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild)
Beginnt einen Vorgang zum Verschieben einer Spalte.
Wenn Sie eine Unterklasse neu implementieren, vereinfacht diese Methode das Verschieben von Entitäten in Ihrem Modell. Diese Methode ist für das Verschieben von persistenten Indizes im Modell verantwortlich, was Sie sonst selbst tun müssten. Die Verwendung von beginMoveColumns und endMoveColumns ist eine Alternative zur direkten Ausgabe von layoutAboutToBeChanged und layoutChanged zusammen mit changePersistentIndex.
Der Index sourceParent entspricht dem übergeordneten Element, aus dem die Spalten verschoben werden; sourceFirst und sourceLast sind die ersten und letzten Spaltennummern der zu verschiebenden Spalten. Der Index destinationParent entspricht der übergeordneten Spalte, in die diese Spalten verschoben werden. destinationChild ist die Spalte, in die die Spalten verschoben werden sollen. Das heißt, der Index der Spalte sourceFirst in sourceParent wird zur Spalte destinationChild in destinationParent, gefolgt von allen anderen Spalten bis zu sourceLast.
Beim Verschieben von Spalten nach unten im gleichen übergeordneten Element (sourceParent und destinationParent sind gleich) werden die Spalten jedoch vor dem Index destinationChild platziert. Das heißt, wenn Sie die Spalten 0 und 1 verschieben möchten, so dass sie zu den Spalten 1 und 2 werden, sollte destinationChild die Nummer 3 sein. In diesem Fall ist der neue Index für die Quellspalte i
(die zwischen sourceFirst und sourceLast liegt) gleich (destinationChild-sourceLast-1+i)
.
Beachten Sie, dass Sie, wenn sourceParent und destinationParent gleich sind, sicherstellen müssen, dass destinationChild nicht innerhalb des Bereichs von sourceFirst und sourceLast + 1 liegt. Sie müssen auch sicherstellen, dass Sie nicht versuchen, eine Spalte zu einem ihrer eigenen Kinder oder Vorfahren zu verschieben. Diese Methode gibt false
zurück, wenn eine der beiden Bedingungen erfüllt ist; in diesem Fall sollten Sie den Verschiebevorgang abbrechen.
Siehe auch endMoveColumns().
[protected]
bool QAbstractItemModel::beginMoveRows(const QModelIndex &sourceParent, int sourceFirst, int sourceLast, const QModelIndex &destinationParent, int destinationChild)
Beginnt einen Zeilenverschiebevorgang.
Wenn Sie eine Unterklasse neu implementieren, vereinfacht diese Methode das Verschieben von Entitäten in Ihrem Modell. Diese Methode ist für das Verschieben von persistenten Indizes im Modell verantwortlich, was Sie sonst selbst tun müssten. Die Verwendung von beginMoveRows und endMoveRows ist eine Alternative zur direkten Ausgabe von layoutAboutToBeChanged und layoutChanged zusammen mit changePersistentIndex.
Der Index sourceParent entspricht dem übergeordneten Element, aus dem die Zeilen verschoben werden; sourceFirst und sourceLast sind die ersten und letzten Zeilennummern der zu verschiebenden Zeilen. Der Index destinationParent entspricht dem übergeordneten Element, in das diese Zeilen verschoben werden. destinationChild ist die Zeile, in die die Zeilen verschoben werden sollen. Das heißt, der Index der Zeile sourceFirst in sourceParent wird zur Zeile destinationChild in destinationParent, gefolgt von allen anderen Zeilen bis zu sourceLast.
Wenn Sie jedoch Zeilen im gleichen übergeordneten Verzeichnis nach unten verschieben (sourceParent und destinationParent sind gleich), werden die Zeilen vor dem Index destinationChild platziert. Das heißt, wenn Sie die Zeilen 0 und 1 verschieben möchten, so dass sie zu den Zeilen 1 und 2 werden, sollte destinationChild die Nummer 3 sein. In diesem Fall ist der neue Index für die Quellzeile i
(die zwischen sourceFirst und sourceLast liegt) gleich (destinationChild-sourceLast-1+i)
.
Beachten Sie, dass, wenn sourceParent und destinationParent gleich sind, Sie sicherstellen müssen, dass destinationChild nicht im Bereich von sourceFirst und sourceLast + 1 liegt. Sie müssen auch sicherstellen, dass Sie nicht versuchen, eine Zeile in eines ihrer eigenen Kinder oder Vorfahren zu verschieben. Diese Methode gibt false
zurück, wenn eine der beiden Bedingungen erfüllt ist. In diesem Fall sollten Sie den Verschiebevorgang abbrechen.
![]() | Geben Sie die erste und die letzte Zeilennummer für die Zeilenspanne in der übergeordneten Quelle an, die Sie im Modell verschieben möchten. Geben Sie auch die Zeile im übergeordneten Ziel an, in die die Spanne verschoben werden soll. Wie im Diagramm dargestellt, werden beispielsweise drei Zeilen von Zeile 2 nach 4 in der Quelle verschoben. sourceFirst ist also 2 und sourceLast ist 4. Wir verschieben diese Elemente in die Zeile über 2 im Ziel, destinationChild ist also 2. beginMoveRows(sourceParent, 2, 4, destinationParent, 2); Dadurch werden die drei Zeilen 2, 3 und 4 in der Quelle zu 2, 3 und 4 im Ziel. Andere betroffene Geschwister werden entsprechend verschoben. |
![]() | Um Zeilen an ein anderes übergeordnetes Element anzuhängen, verschieben Sie sie nach der letzten Zeile. Wie im Diagramm dargestellt, verschieben wir beispielsweise drei Zeilen in eine Sammlung von 6 vorhandenen Zeilen (die in Zeile 5 enden), so dass destinationChild 6 ist: beginMoveRows(sourceParent, 2, 4, destinationParent, 6); Dadurch werden die Zielzeilen als 6, 7 und 8 an das Ende des übergeordneten Ziels verschoben. |
![]() | Um Zeilen innerhalb desselben übergeordneten Elements zu verschieben, geben Sie die Zeile an, in die sie verschoben werden sollen. Wie im Diagramm dargestellt, wird beispielsweise ein Element von Zeile 2 nach Zeile 0 verschoben, so dass sourceFirst und sourceLast zu 2 und destinationChild zu 0 werden. beginMoveRows(parent, 2, 2, parent, 0); Beachten Sie, dass andere Zeilen entsprechend verschoben werden können. Beachten Sie auch, dass Sie beim Verschieben von Elementen innerhalb desselben übergeordneten Elements keine ungültigen oder No-op-Verschiebungen versuchen sollten. Im obigen Beispiel befindet sich Eintrag 2 vor der Verschiebung in Zeile 2 und kann daher nicht in Zeile 2 (wo er sich bereits befindet) oder in Zeile 3 verschoben werden (ein No-op, denn Zeile 3 bedeutet über Zeile 3, wo er sich bereits befindet) |
![]() | Um Zeilen innerhalb desselben übergeordneten Elements zu verschieben, geben Sie die Zeile an, in die sie verschoben werden sollen. Wie im Diagramm dargestellt, verschieben wir beispielsweise ein Element von Zeile 2 nach Zeile 4, so dass sourceFirst und sourceLast zu 2 und destinationChild zu 4 werden. beginMoveRows(parent, 2, 2, parent, 4); Beachten Sie, dass andere Zeilen entsprechend verschoben werden können. |
Siehe auch endMoveRows().
[protected]
void QAbstractItemModel::beginRemoveColumns(const QModelIndex &parent, int first, int last)
Beginnt einen Vorgang zum Entfernen einer Spalte.
Wenn Sie removeColumns() in einer Unterklasse neu implementieren, müssen Sie diese Funktion aufrufen , bevor Sie Daten aus dem zugrunde liegenden Datenspeicher des Modells entfernen.
Der Index parent entspricht dem übergeordneten Element, aus dem die neuen Spalten entfernt werden; first und last sind die Spaltennummern der ersten und letzten zu entfernenden Spalte.
![]() | Geben Sie die ersten und letzten Spaltennummern für die Spanne von Spalten an, die Sie aus einem Element in einem Modell entfernen möchten. Wie im Diagramm dargestellt, werden beispielsweise die drei Spalten von Spalte 4 bis Spalte 6 entfernt. first ist also 4 und last ist 6: beginRemoveColumns(parent, 4, 6); |
Hinweis: Diese Funktion gibt das Signal columnsAboutToBeRemoved() aus, das verbundene Ansichten (oder Proxies) verarbeiten müssen, bevor die Daten entfernt werden. Andernfalls können die Ansichten in einem ungültigen Zustand enden.
Siehe auch endRemoveColumns().
[protected]
void QAbstractItemModel::beginRemoveRows(const QModelIndex &parent, int first, int last)
Beginnt einen Zeilenentfernungsvorgang.
Wenn Sie removeRows() in einer Unterklasse neu implementieren, müssen Sie diese Funktion aufrufen , bevor Sie Daten aus dem zugrunde liegenden Datenspeicher des Modells entfernen.
Der Index parent entspricht dem übergeordneten Element, aus dem die neuen Zeilen entfernt werden; first und last sind die Zeilennummern der zu entfernenden Zeilen.
![]() | Geben Sie die erste und letzte Zeilennummer für die Spanne von Zeilen an, die Sie aus einem Element in einem Modell entfernen möchten. Wie im Diagramm dargestellt, werden beispielsweise die beiden Zeilen von Zeile 2 bis Zeile 3 entfernt. first ist also 2 und last ist 3: beginRemoveRows(parent, 2, 3); |
Hinweis: Diese Funktion gibt das Signal rowsAboutToBeRemoved() aus, das verbundene Ansichten (oder Proxies) verarbeiten müssen, bevor die Daten entfernt werden. Andernfalls können die Ansichten in einem ungültigen Zustand enden.
Siehe auch endRemoveRows().
[protected]
void QAbstractItemModel::beginResetModel()
Beginnt einen Vorgang zum Zurücksetzen des Modells.
Ein Rücksetzvorgang setzt das Modell in allen angehängten Ansichten auf seinen aktuellen Zustand zurück.
Hinweis: Alle Ansichten, die mit diesem Modell verbunden sind, werden ebenfalls zurückgesetzt.
Wenn ein Modell zurückgesetzt wird, bedeutet dies, dass alle zuvor vom Modell gemeldeten Daten nun ungültig sind und erneut abgefragt werden müssen. Dies bedeutet auch, dass das aktuelle Element und alle ausgewählten Elemente ungültig werden.
Wenn ein Modell seine Daten radikal ändert, kann es manchmal einfacher sein, nur diese Funktion aufzurufen, anstatt dataChanged() auszugeben, um andere Komponenten zu informieren, wenn sich die zugrunde liegende Datenquelle oder ihre Struktur geändert hat.
Sie müssen diese Funktion aufrufen, bevor Sie irgendwelche internen Datenstrukturen in Ihrem Modell oder Proxy-Modell zurücksetzen.
Diese Funktion sendet das Signal modelAboutToBeReset().
Siehe auch modelAboutToBeReset(), modelReset(), und endResetModel().
[virtual]
QModelIndex QAbstractItemModel::buddy(const QModelIndex &index) const
Gibt einen Modellindex für den Kumpel des Elements zurück, das durch index dargestellt wird. Wenn der Benutzer ein Element bearbeiten möchte, ruft die Ansicht diese Funktion auf, um zu prüfen, ob stattdessen ein anderes Element im Modell bearbeitet werden sollte. Dann konstruiert die Ansicht einen Delegaten unter Verwendung des vom Buddy-Element zurückgegebenen Modellindexes.
Bei der Standardimplementierung dieser Funktion ist jedes Element ein eigener Buddy.
[virtual]
bool QAbstractItemModel::canDropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) const
Gibt true
zurück, wenn ein Modell ein Ablegen des data akzeptieren kann. Diese Standardimplementierung prüft nur, ob data mindestens ein Format in der Liste von mimeTypes() hat und ob action unter supportedDropActions() des Modells ist.
Reimplementieren Sie diese Funktion in Ihrem benutzerdefinierten Modell, wenn Sie testen wollen, ob data unter row, column, parent mit action abgelegt werden kann. Wenn Sie diesen Test nicht benötigen, ist es nicht notwendig, diese Funktion neu zu implementieren.
Siehe auch dropMimeData() und Verwenden von Drag and Drop mit Elementansichten.
[virtual invokable]
bool QAbstractItemModel::canFetchMore(const QModelIndex &parent) const
Gibt true
zurück, wenn mehr Daten für parent verfügbar sind; andernfalls wird false
zurückgegeben.
Die Standardimplementierung gibt immer false
zurück.
Wenn canFetchMore() true
zurückgibt, sollte die Funktion fetchMore() aufgerufen werden. So verhält sich z. B. die Funktion QAbstractItemView.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch fetchMore().
[protected]
void QAbstractItemModel::changePersistentIndex(const QModelIndex &from, const QModelIndex &to)
Ändert den QPersistentModelIndex, der gleich dem angegebenen from model index ist, in den angegebenen to model index.
Wenn kein persistenter Modellindex gefunden wurde, der dem angegebenen from model index entspricht, wird nichts geändert.
Siehe auch persistentIndexList() und changePersistentIndexList().
[protected]
void QAbstractItemModel::changePersistentIndexList(const QModelIndexList &from, const QModelIndexList &to)
Ändert die {QPersistentModelIndex}e, die gleich den Indizes in der angegebenen from Modellindexliste sind, in die angegebene to Modellindexliste.
Falls keine persistenten Modellindizes gefunden werden, die den Indizes in der angegebenen from Modellindexliste entsprechen, wird nichts geändert.
Siehe auch persistentIndexList() und changePersistentIndex().
bool QAbstractItemModel::checkIndex(const QModelIndex &index, QAbstractItemModel::CheckIndexOptions options = CheckIndexOption::NoOption) const
Diese Funktion prüft, ob index ein zulässiger Modellindex für dieses Modell ist. Ein legaler Modell-Index ist entweder ein ungültiger Modell-Index oder ein gültiger Modell-Index, für den alle folgenden Punkte zutreffen:
- Das Modell des Index ist
this
; - die Zeile "index" ist größer oder gleich Null;
- die Zeile "index" ist kleiner als die Zeilenzahl für den übergeordneten Index;
- die Spalte 'index' ist größer oder gleich Null;
- die Spalte 'index' ist kleiner als die Spaltenanzahl für das übergeordnete Element 'index'.
Das Argument options kann einige dieser Überprüfungen ändern. Wenn options IndexIsValid
enthält, muss index ein gültiger Index sein; dies ist nützlich bei der Neuimplementierung von Funktionen wie data() oder setData(), die gültige Indizes erwarten.
Wenn options DoNotUseParent
enthält, werden die Prüfungen, die parent() aufrufen würden, ausgelassen; dies ermöglicht den Aufruf dieser Funktion von einer parent()-Reimplementierung aus (andernfalls würde dies zu einer endlosen Rekursion und einem Absturz führen).
Wenn options nicht DoNotUseParent
enthält und ParentIsInvalid
enthält, wird eine zusätzliche Prüfung durchgeführt: der übergeordnete Index wird auf Ungültigkeit geprüft. Dies ist nützlich, wenn flache Modelle wie Listen oder Tabellen implementiert werden, bei denen kein Modellindex einen gültigen Elternindex haben sollte.
Diese Funktion gibt true zurück, wenn alle Überprüfungen erfolgreich waren, und andernfalls false. Dies ermöglicht die Verwendung der Funktion in Q_ASSERT und ähnlichen anderen Debugging-Mechanismen. Wenn eine Prüfung fehlgeschlagen ist, wird eine Warnmeldung in der Protokollierungskategorie qt.core.qabstractitemmodel.checkindex
ausgegeben, die einige Informationen enthält, die für die Fehlersuche nützlich sein können.
Hinweis: Diese Funktion ist eine Debugging-Hilfe für die Implementierung Ihrer eigenen Objektmodelle. Bei der Entwicklung komplexer Modelle sowie beim Aufbau komplizierter Modellhierarchien (z.B. unter Verwendung von Proxy-Modellen) ist es sinnvoll, diese Funktion aufzurufen, um Fehler in Bezug auf illegale Modellindizes (wie oben definiert) zu finden, die versehentlich an eine QAbstractItemModel API übergeben wurden.
Warnung: Beachten Sie, dass es ein undefiniertes Verhalten ist, illegale Indizes an Elementmodelle zu übergeben, so dass Anwendungen davon absehen müssen und sich nicht auf eine "defensive" Programmierung verlassen dürfen, die Elementmodelle einsetzen könnten, um illegale Indizes elegant zu behandeln.
Siehe auch QModelIndex.
[virtual, since 6.0]
bool QAbstractItemModel::clearItemData(const QModelIndex &index)
Entfernt die in allen Rollen gespeicherten Daten für die angegebene index. Gibt bei Erfolg true
zurück, andernfalls false
. Das Signal dataChanged() sollte ausgegeben werden, wenn die Daten erfolgreich entfernt wurden. Die Implementierung der Basisklasse gibt false
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch data(), itemData(), setData(), und setItemData().
[pure virtual invokable]
int QAbstractItemModel::columnCount(const QModelIndex &parent = QModelIndex()) const
Gibt die Anzahl der Spalten für die Kinder der angegebenen parent zurück.
In den meisten Unterklassen ist die Anzahl der Spalten unabhängig von der parent.
Zum Beispiel:
int MyModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); return 3; }
Hinweis: Bei der Implementierung eines tabellenbasierten Modells sollte columnCount() 0 zurückgeben, wenn die übergeordnete Klasse gültig ist.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch rowCount().
[private signal]
void QAbstractItemModel::columnsAboutToBeInserted(const QModelIndex &parent, int first, int last)
Dieses Signal wird ausgegeben, kurz bevor Spalten in das Modell eingefügt werden. Die neuen Elemente werden zwischen first und last einschließlich, unter dem angegebenen Element parent positioniert.
Hinweis: Komponenten, die mit diesem Signal verbunden sind, verwenden es, um sich an Änderungen der Abmessungen des Modells anzupassen. Es kann nur von der QAbstractItemModel Implementierung ausgesendet werden und kann nicht explizit in Unterklassen-Code ausgesendet werden.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, aber nicht vom Benutzer ausgegeben werden.
Siehe auch insertColumns() und beginInsertColumns().
[private signal]
void QAbstractItemModel::columnsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn)
Dieses Signal wird ausgegeben, kurz bevor Spalten innerhalb des Modells verschoben werden. Die Elemente, die verschoben werden, sind diejenigen zwischen sourceStart und sourceEnd einschließlich, unter dem gegebenen Element sourceParent. Sie werden nach destinationParent verschoben, beginnend mit der Spalte destinationColumn.
Hinweis: Komponenten, die mit diesem Signal verbunden sind, verwenden es, um sich an Änderungen in den Dimensionen des Modells anzupassen. Es kann nur von der QAbstractItemModel Implementierung ausgesendet werden und kann nicht explizit in Unterklassen-Code ausgesendet werden.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, aber nicht vom Benutzer ausgegeben werden.
Siehe auch beginMoveRows().
[private signal]
void QAbstractItemModel::columnsAboutToBeRemoved(const QModelIndex &parent, int first, int last)
Dieses Signal wird ausgegeben, kurz bevor Spalten aus dem Modell entfernt werden. Die zu entfernenden Elemente sind diejenigen zwischen first und last einschließlich, unter dem angegebenen Element parent.
Hinweis: Komponenten, die mit diesem Signal verbunden sind, verwenden es, um sich an Änderungen in den Dimensionen des Modells anzupassen. Es kann nur von der QAbstractItemModel Implementierung ausgegeben werden und kann nicht explizit in Unterklassencode ausgegeben werden.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, aber nicht vom Benutzer ausgegeben werden.
Siehe auch removeColumns() und beginRemoveColumns().
[private signal]
void QAbstractItemModel::columnsInserted(const QModelIndex &parent, int first, int last)
Dieses Signal wird ausgegeben, nachdem Spalten in das Modell eingefügt worden sind. Die neuen Elemente sind diejenigen zwischen first und last einschließlich, unter dem angegebenen Element parent.
Hinweis: Komponenten, die mit diesem Signal verbunden sind, verwenden es, um sich an Änderungen in den Dimensionen des Modells anzupassen. Es kann nur von der QAbstractItemModel Implementierung ausgesendet werden und kann nicht explizit in Unterklassencode ausgesendet werden.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, aber nicht vom Benutzer ausgegeben werden.
Siehe auch insertColumns() und beginInsertColumns().
[private signal]
void QAbstractItemModel::columnsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationColumn)
Dieses Signal wird ausgegeben, nachdem Spalten innerhalb des Modells verschoben worden sind. Die Elemente zwischen sourceStart und sourceEnd einschließlich, unter dem angegebenen Element sourceParent wurden nach destinationParent ab der Spalte destinationColumn verschoben.
Hinweis: Komponenten, die mit diesem Signal verbunden sind, verwenden es, um sich an Änderungen in den Dimensionen des Modells anzupassen. Es kann nur von der QAbstractItemModel Implementierung ausgegeben werden, und kann nicht explizit in Unterklassencode ausgegeben werden.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, aber nicht vom Benutzer ausgegeben werden.
Siehe auch beginMoveRows().
[private signal]
void QAbstractItemModel::columnsRemoved(const QModelIndex &parent, int first, int last)
Dieses Signal wird ausgegeben, nachdem Spalten aus dem Modell entfernt worden sind. Die entfernten Elemente sind diejenigen zwischen first und last einschließlich, unter dem angegebenen Element parent.
Hinweis: Komponenten, die mit diesem Signal verbunden sind, verwenden es, um sich an Änderungen in den Dimensionen des Modells anzupassen. Es kann nur von der QAbstractItemModel Implementierung ausgesendet werden und kann nicht explizit in Unterklassencode ausgesendet werden.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, aber nicht vom Benutzer ausgegeben werden.
Siehe auch removeColumns() und beginRemoveColumns().
[protected]
QModelIndex QAbstractItemModel::createIndex(int row, int column, const void *ptr = nullptr) const
Erzeugt einen Modellindex für die angegebenen row und column mit dem internen Zeiger ptr.
Bei Verwendung eines QSortFilterProxyModel haben dessen Indizes ihren eigenen internen Zeiger. Es ist nicht ratsam, auf diesen internen Zeiger außerhalb des Modells zuzugreifen. Verwenden Sie stattdessen die Funktion data().
Diese Funktion stellt eine einheitliche Schnittstelle zur Verfügung, die Modellunterklassen verwenden müssen, um Modellindizes zu erstellen.
[protected]
QModelIndex QAbstractItemModel::createIndex(int row, int column, quintptr id) const
Erzeugt einen Modellindex für die angegebenen row und column mit dem internen Bezeichner id.
Diese Funktion stellt eine konsistente Schnittstelle zur Verfügung, die Modellunterklassen verwenden müssen, um Modellindizes zu erstellen.
Siehe auch QModelIndex::internalId().
[pure virtual invokable]
QVariant QAbstractItemModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const
Gibt die unter dem angegebenen role gespeicherten Daten für das Element zurück, auf das index verweist.
Hinweis: Wenn Sie keinen Wert zurückgeben können, wird ein ungültiger (standardmäßig konstruierter) QVariant zurückgegeben.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch Qt::ItemDataRole, setData(), und headerData().
[signal]
void QAbstractItemModel::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QList<int> &roles = QList<int>())
Dieses Signal wird ausgegeben, wenn sich die Daten in einem vorhandenen Eintrag ändern.
Gehören die Elemente zu demselben übergeordneten Element, sind die Elemente zwischen topLeft und bottomRight betroffen. Wenn die Elemente nicht dasselbe Elternteil haben, ist das Verhalten undefiniert.
Wenn die Funktion setData() neu implementiert wird, muss dieses Signal explizit ausgegeben werden.
Das optionale Argument roles kann verwendet werden, um anzugeben, welche Datenrollen tatsächlich geändert wurden. Ein leerer Vektor im Argument roles bedeutet, dass alle Rollen als geändert gelten sollen. Die Reihenfolge der Elemente im Argument roles hat keine Bedeutung.
Siehe auch headerDataChanged(), setData(), und layoutChanged().
[virtual]
bool QAbstractItemModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)
Verarbeitet die data, die von einem Drag&Drop-Vorgang geliefert wurde, der mit der angegebenen action endete.
Gibt true
zurück, wenn die Daten und die Aktion vom Modell verarbeitet wurden; andernfalls wird false
zurückgegeben.
Die angegebenen row, column und parent geben die Position eines Elements im Modell an, an der der Vorgang beendet wurde. Es liegt in der Verantwortung des Modells, die Aktion an der richtigen Stelle zu beenden.
Zum Beispiel kann eine Drop-Aktion auf ein Element in einem QTreeView dazu führen, dass neue Elemente entweder als Kinder des durch row, column und parent angegebenen Elements oder als Geschwister des Elements eingefügt werden.
Wenn row und column -1 sind, bedeutet dies, dass die gelöschten Daten als direkt auf parent gelöscht betrachtet werden sollten. In der Regel bedeutet dies, dass die Daten als untergeordnete Elemente von parent angehängt werden. Wenn row und column größer oder gleich Null sind, bedeutet dies, dass die Löschung kurz vor den angegebenen row und column im angegebenen parent erfolgt ist.
Das Mitglied mimeTypes() wird aufgerufen, um die Liste der akzeptablen MIME-Typen zu erhalten. Diese Standardimplementierung geht von der Standardimplementierung von mimeTypes() aus, die einen einzigen Standard-MIME-Typ zurückgibt. Wenn Sie mimeTypes() in Ihrem benutzerdefinierten Modell neu implementieren, um mehrere MIME-Typen zurückzugeben, müssen Sie diese Funktion neu implementieren, um sie nutzen zu können.
Siehe auch supportedDropActions(), canDropMimeData() und Verwenden von Drag & Drop mit Elementansichten.
[protected]
void QAbstractItemModel::endInsertColumns()
Beendet einen Spalteneinfügevorgang.
Wenn Sie insertColumns() in einer Unterklasse reimplementieren, müssen Sie diese Funktion nach dem Einfügen von Daten in den zugrunde liegenden Datenspeicher des Modells aufrufen.
Siehe auch beginInsertColumns().
[protected]
void QAbstractItemModel::endInsertRows()
Beendet einen Zeileneinfügevorgang.
Wenn Sie insertRows() in einer Unterklasse reimplementieren, müssen Sie diese Funktion nach dem Einfügen von Daten in den zugrunde liegenden Datenspeicher des Modells aufrufen.
Siehe auch beginInsertRows().
[protected]
void QAbstractItemModel::endMoveColumns()
Beendet einen Spaltenverschiebevorgang.
Wenn Sie eine Unterklasse implementieren, müssen Sie diese Funktion nach dem Verschieben von Daten innerhalb des zugrunde liegenden Datenspeichers des Modells aufrufen.
Siehe auch beginMoveColumns().
[protected]
void QAbstractItemModel::endMoveRows()
Beendet einen Zeilenverschiebevorgang.
Wenn Sie eine Unterklasse implementieren, müssen Sie diese Funktion nach dem Verschieben von Daten im zugrunde liegenden Datenspeicher des Modells aufrufen.
Siehe auch beginMoveRows().
[protected]
void QAbstractItemModel::endRemoveColumns()
Beendet einen Vorgang zum Entfernen einer Spalte.
Wenn Sie removeColumns() in einer Unterklasse neu implementieren, müssen Sie diese Funktion nach dem Entfernen von Daten aus dem zugrunde liegenden Datenspeicher des Modells aufrufen.
Siehe auch beginRemoveColumns().
[protected]
void QAbstractItemModel::endRemoveRows()
Beendet einen Zeilenentfernungsvorgang.
Wenn Sie removeRows() in einer Unterklasse neu implementieren, müssen Sie diese Funktion nach dem Entfernen von Daten aus dem zugrunde liegenden Datenspeicher des Modells aufrufen.
Siehe auch beginRemoveRows().
[protected]
void QAbstractItemModel::endResetModel()
Schließt einen Modellrücksetzungsvorgang ab.
Sie müssen diese Funktion aufrufen, nachdem Sie eine interne Datenstruktur in Ihrem Modell oder Proxy-Modell zurückgesetzt haben.
Diese Funktion gibt das Signal modelReset() aus.
Siehe auch beginResetModel().
[virtual invokable]
void QAbstractItemModel::fetchMore(const QModelIndex &parent)
Holt alle verfügbaren Daten für die Elemente mit dem durch den Index parent angegebenen übergeordneten Element ab.
Implementieren Sie dies neu, wenn Sie Ihr Modell schrittweise auffüllen.
Die Standardimplementierung tut nichts.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch canFetchMore().
[virtual invokable]
Qt::ItemFlags QAbstractItemModel::flags(const QModelIndex &index) const
Gibt die Element-Flags für das angegebene index zurück.
Die Implementierung der Basisklasse gibt eine Kombination von Flags zurück, die das Element aktiviert (ItemIsEnabled
) und seine Auswahl ermöglicht (ItemIsSelectable
).
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch Qt::ItemFlags.
[virtual invokable]
bool QAbstractItemModel::hasChildren(const QModelIndex &parent = QModelIndex()) const
Gibt true
zurück, wenn parent Kinder hat; andernfalls gibt es false
zurück.
Verwenden Sie rowCount() auf dem Elternteil, um die Anzahl der Kinder zu ermitteln.
Beachten Sie, dass es ein undefiniertes Verhalten ist, mit dieser Methode zu melden, dass ein bestimmter Index hasChildren hat, wenn derselbe Index das Flag Qt::ItemNeverHasChildren gesetzt hat.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch parent() und index().
[invokable]
bool QAbstractItemModel::hasIndex(int row, int column, const QModelIndex &parent = QModelIndex()) const
Gibt true
zurück, wenn das Modell ein gültiges QModelIndex für row und column mit parent liefert, andernfalls gibt es false
zurück.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
[virtual invokable]
QVariant QAbstractItemModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const
Gibt die Daten für die angegebenen role und section in der Kopfzeile mit der angegebenen orientation zurück.
Bei horizontalen Kopfzeilen entspricht die Abschnittsnummer der Spaltennummer. Bei vertikalen Kopfzeilen entspricht die Abschnittsnummer der Zeilennummer.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch Qt::ItemDataRole, setHeaderData(), und QHeaderView.
[signal]
void QAbstractItemModel::headerDataChanged(Qt::Orientation orientation, int first, int last)
Dieses Signal wird ausgegeben, wenn eine Kopfzeile geändert wird. Die orientation zeigt an, ob sich die horizontale oder vertikale Kopfzeile geändert hat. Die Abschnitte in der Kopfzeile von first bis last müssen aktualisiert werden.
Wenn Sie die Funktion setHeaderData() neu implementieren, muss dieses Signal explizit ausgegeben werden.
Wenn Sie die Anzahl der Spalten oder Zeilen ändern, brauchen Sie dieses Signal nicht auszusenden, sondern verwenden Sie die Funktionen begin/end (siehe den Abschnitt über Subclassing in der Klassenbeschreibung QAbstractItemModel für Details).
Siehe auch headerData(), setHeaderData(), und dataChanged().
[pure virtual invokable]
QModelIndex QAbstractItemModel::index(int row, int column, const QModelIndex &parent = QModelIndex()) const
Gibt den Index des Elements in dem Modell zurück, das durch den angegebenen row, column und parent Index spezifiziert ist.
Wenn Sie diese Funktion in einer Unterklasse reimplementieren, rufen Sie createIndex() auf, um Modellindizes zu erzeugen, die andere Komponenten verwenden können, um auf Elemente in Ihrem Modell zu verweisen.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch createIndex().
[invokable]
bool QAbstractItemModel::insertColumn(int column, const QModelIndex &parent = QModelIndex())
Fügt eine einzelne Spalte vor der angegebenen column in die untergeordneten Elemente des angegebenen parent ein.
Gibt true
zurück, wenn die Spalte eingefügt wurde; andernfalls wird false
zurückgegeben.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch insertColumns(), insertRow(), und removeColumn().
[virtual invokable]
bool QAbstractItemModel::insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())
Bei Modellen, die dies unterstützen, fügt count neue Spalten in das Modell vor dem angegebenen column ein. Die Elemente in jeder neuen Spalte sind Kinder des Elements, das durch den Modellindex parent dargestellt wird.
Wenn column gleich 0 ist, werden die Spalten allen vorhandenen Spalten vorangestellt.
Wenn column gleich columnCount() ist, werden die Spalten an alle vorhandenen Spalten angehängt.
Wenn parent keine Kinder hat, wird eine einzelne Zeile mit count Spalten eingefügt.
Gibt true
zurück, wenn die Spalten erfolgreich eingefügt wurden; andernfalls false
.
Die Implementierung der Basisklasse tut nichts und gibt false
zurück.
Wenn Sie Ihr eigenes Modell implementieren, können Sie diese Funktion neu implementieren, wenn Sie Einfügungen unterstützen möchten. Alternativ können Sie eine eigene API zum Ändern der Daten bereitstellen.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch insertRows(), removeColumns(), beginInsertColumns(), und endInsertColumns().
[invokable]
bool QAbstractItemModel::insertRow(int row, const QModelIndex &parent = QModelIndex())
Fügt eine einzelne Zeile vor dem angegebenen row in die untergeordneten Elemente des angegebenen parent ein.
Hinweis: Diese Funktion ruft die virtuelle Methode insertRows auf.
Gibt true
zurück, wenn die Zeile eingefügt wurde; andernfalls wird false
zurückgegeben.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch insertRows(), insertColumn(), und removeRow().
[virtual invokable]
bool QAbstractItemModel::insertRows(int row, int count, const QModelIndex &parent = QModelIndex())
Hinweis: Die Implementierung dieser Funktion in der Basisklasse tut nichts und gibt false
zurück.
Bei Modellen, die dies unterstützen, fügt count Zeilen in das Modell vor der angegebenen row ein. Die Elemente in der neuen Zeile sind Kinder des Elements, das durch den Modellindex parent repräsentiert wird.
Wenn row gleich 0 ist, werden die Zeilen allen vorhandenen Zeilen im Elternteil vorangestellt.
Wenn row gleich rowCount() ist, werden die Zeilen an alle vorhandenen Zeilen in der Elterndatei angehängt.
Wenn parent keine Kinder hat, wird eine einzelne Spalte mit count Zeilen eingefügt.
Gibt true
zurück, wenn die Zeilen erfolgreich eingefügt wurden; andernfalls gibt false
zurück.
Wenn Sie Ihr eigenes Modell implementieren, können Sie diese Funktion neu implementieren, wenn Sie Einfügungen unterstützen wollen. Alternativ können Sie eine eigene API zum Ändern der Daten bereitstellen. In jedem Fall müssen Sie beginInsertRows() und endInsertRows() aufrufen, um anderen Komponenten mitzuteilen, dass sich das Modell geändert hat.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch insertColumns(), removeRows(), beginInsertRows(), und endInsertRows().
[virtual]
QMap<int, QVariant> QAbstractItemModel::itemData(const QModelIndex &index) const
Gibt eine Map mit Werten für alle vordefinierten Rollen im Modell für das Element unter der angegebenen index zurück.
Reimplementieren Sie diese Funktion, wenn Sie das Standardverhalten dieser Funktion erweitern wollen, um benutzerdefinierte Rollen in die Map aufzunehmen.
Siehe auch setItemData(), Qt::ItemDataRole, und data().
[signal]
void QAbstractItemModel::layoutAboutToBeChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint)
Dieses Signal wird ausgegeben, kurz bevor das Layout eines Modells geändert wird. Komponenten, die mit diesem Signal verbunden sind, verwenden es, um sich an Änderungen im Layout des Modells anzupassen.
Unterklassen sollten alle persistenten Modellindizes nach dem Aussenden von layoutAboutToBeChanged() aktualisieren.
Der optionale Parameter parents wird verwendet, um eine spezifischere Benachrichtigung darüber zu geben, welche Teile des Layouts des Modells sich ändern. Eine leere Liste zeigt an, dass sich das Layout des gesamten Modells ändert. Die Reihenfolge der Elemente in der Liste parents ist unerheblich. Der optionale Parameter hint wird verwendet, um einen Hinweis darauf zu geben, was passiert, während das Modell neu angeordnet wird.
Siehe auch layoutChanged() und changePersistentIndex().
[signal]
void QAbstractItemModel::layoutChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint)
Dieses Signal wird ausgegeben, wenn sich das Layout der vom Modell dargestellten Elemente geändert hat, z. B. wenn das Modell sortiert wurde. Wenn dieses Signal von einer Ansicht empfangen wird, sollte sie das Layout der Elemente aktualisieren, um diese Änderung widerzuspiegeln.
Wenn Sie QAbstractItemModel oder QAbstractProxyModel subclassing, stellen Sie sicher, dass Sie layoutAboutToBeChanged() ausgeben, bevor Sie die Reihenfolge der Elemente oder die Struktur der Daten, die Sie den Ansichten zur Verfügung stellen, ändern, und layoutChanged() ausgeben, nachdem Sie das Layout geändert haben.
Der optionale Parameter parents wird verwendet, um eine genauere Mitteilung darüber zu geben, welche Teile des Layouts des Modells sich ändern. Eine leere Liste zeigt eine Änderung des Layouts des gesamten Modells an. Die Reihenfolge der Elemente in der Liste parents ist unerheblich. Der optionale Parameter hint wird verwendet, um einen Hinweis darauf zu geben, was passiert, während das Modell weitergegeben wird.
Unterklassen sollten alle persistenten Modellindizes aktualisieren, bevor sie layoutChanged() ausgeben. Mit anderen Worten, wenn sich die Struktur ändert:
- emit layoutAboutToBeChanged
- Merken Sie sich die QModelIndex, die sich ändern wird
- Aktualisieren Sie Ihre internen Daten
- Aufruf von changePersistentIndex()
- emit layoutChanged
Siehe auch layoutAboutToBeChanged(), dataChanged(), headerDataChanged(), modelReset(), und changePersistentIndex().
[virtual invokable]
QModelIndexList QAbstractItemModel::match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const
Gibt eine Liste von Indizes für die Elemente in der Spalte des Index start zurück, bei denen die unter dem angegebenen role gespeicherten Daten mit dem angegebenen value übereinstimmen. Die Art und Weise, wie die Suche durchgeführt wird, wird durch die angegebene flags definiert. Die Liste, die zurückgegeben wird, kann leer sein. Beachten Sie auch, dass die Reihenfolge der Ergebnisse in der Liste möglicherweise nicht mit der Reihenfolge im Modell übereinstimmt, wenn z. B. ein Proxy-Modell verwendet wird. Auf die Reihenfolge der Ergebnisse kann kein Verlass sein.
Die Suche beginnt mit dem Index start und wird fortgesetzt, bis die Anzahl der übereinstimmenden Datenelemente gleich hits ist, die Suche die letzte Zeile erreicht oder die Suche erneut start erreicht - je nachdem, ob MatchWrap
in flags angegeben ist. Wenn Sie nach allen übereinstimmenden Elementen suchen wollen, verwenden Sie hits = -1.
Standardmäßig führt diese Funktion einen umlaufenden, zeichenkettenbasierten Vergleich für alle Elemente durch und sucht nach Elementen, die mit dem in value angegebenen Suchbegriff beginnen.
Hinweis: Die Standardimplementierung dieser Funktion durchsucht nur Spalten. Implementieren Sie diese Funktion neu, um ein anderes Suchverhalten einzuschließen.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
[virtual]
QMimeData *QAbstractItemModel::mimeData(const QModelIndexList &indexes) const
Gibt ein Objekt zurück, das serialisierte Datenelemente enthält, die der angegebenen Liste von indexes entsprechen. Das zur Beschreibung der kodierten Daten verwendete Format wird von der Funktion mimeTypes() bezogen. Diese Standardimplementierung verwendet den Standard-MIME-Typ, der von der Standardimplementierung von mimeTypes() zurückgegeben wird. Wenn Sie mimeTypes() in Ihrem benutzerdefinierten Modell neu implementieren, um weitere MIME-Typen zurückzugeben, implementieren Sie diese Funktion neu, um sie zu nutzen.
Wenn die Liste von indexes leer ist oder es keine unterstützten MIME-Typen gibt, wird nullptr
anstelle einer serialisierten leeren Liste zurückgegeben.
Siehe auch mimeTypes() und dropMimeData().
[virtual]
QStringList QAbstractItemModel::mimeTypes() const
Gibt die Liste der zulässigen MIME-Typen zurück. Standardmäßig verwenden die integrierten Modelle und Ansichten einen internen MIME-Typ: application/x-qabstractitemmodeldatalist
.
Wenn Sie bei der Implementierung der Drag&Drop-Unterstützung in einem benutzerdefinierten Modell Daten in anderen Formaten als dem standardmäßigen internen MIME-Typ zurückgeben wollen, implementieren Sie diese Funktion neu, um Ihre Liste der MIME-Typen zurückzugeben.
Wenn Sie diese Funktion in Ihrem benutzerdefinierten Modell neu implementieren, müssen Sie auch die Mitgliedsfunktionen neu implementieren, die sie aufrufen: mimeData() und dropMimeData().
Siehe auch mimeData() und dropMimeData().
[private signal]
void QAbstractItemModel::modelAboutToBeReset()
Dieses Signal wird ausgegeben, wenn beginResetModel() aufgerufen wird, bevor der interne Zustand des Modells (z.B. persistente Modellindizes) ungültig gemacht wurde.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, aber nicht vom Benutzer ausgegeben werden.
Siehe auch beginResetModel() und modelReset().
[private signal]
void QAbstractItemModel::modelReset()
Dieses Signal wird ausgegeben, wenn endResetModel() aufgerufen wird, nachdem der interne Zustand des Modells (z.B. persistente Modellindizes) ungültig gemacht wurde.
Wenn ein Modell zurückgesetzt wird, ist davon auszugehen, dass alle zuvor von ihm abgerufenen Informationen ungültig sind. Dies beinhaltet, ist aber nicht beschränkt auf rowCount() und columnCount(), flags(), Daten, die über data() und roleNames() abgerufen wurden.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, aber nicht vom Benutzer ausgesendet werden.
Siehe auch endResetModel() und modelAboutToBeReset().
[invokable]
bool QAbstractItemModel::moveColumn(const QModelIndex &sourceParent, int sourceColumn, const QModelIndex &destinationParent, int destinationChild)
Bei Modellen, die dies unterstützen, wird sourceColumn von sourceParent nach destinationChild unter destinationParent verschoben.
Gibt true
zurück, wenn die Spalten erfolgreich verschoben wurden; andernfalls false
.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch moveColumns() und moveRow().
[virtual invokable]
bool QAbstractItemModel::moveColumns(const QModelIndex &sourceParent, int sourceColumn, int count, const QModelIndex &destinationParent, int destinationChild)
Bei Modellen, die dies unterstützen, werden die Spalten count beginnend mit der angegebenen sourceColumn unter der übergeordneten sourceParent in die Spalte destinationChild unter der übergeordneten destinationParent verschoben.
Gibt true
zurück, wenn die Spalten erfolgreich verschoben wurden; andernfalls wird false
zurückgegeben.
Die Implementierung der Basisklasse tut nichts und gibt false
zurück.
Wenn Sie Ihr eigenes Modell implementieren, können Sie diese Funktion neu implementieren, wenn Sie das Verschieben unterstützen wollen. Alternativ können Sie eine eigene API zum Ändern der Daten bereitstellen.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch beginMoveColumns() und endMoveColumns().
[invokable]
bool QAbstractItemModel::moveRow(const QModelIndex &sourceParent, int sourceRow, const QModelIndex &destinationParent, int destinationChild)
Bei Modellen, die dies unterstützen, wird sourceRow von sourceParent nach destinationChild unter destinationParent verschoben.
Gibt true
zurück, wenn die Zeilen erfolgreich verschoben wurden; andernfalls wird false
zurückgegeben.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch moveRows() und moveColumn().
[virtual invokable]
bool QAbstractItemModel::moveRows(const QModelIndex &sourceParent, int sourceRow, int count, const QModelIndex &destinationParent, int destinationChild)
Bei Modellen, die dies unterstützen, werden die Zeilen count beginnend mit dem angegebenen sourceRow unter dem übergeordneten sourceParent in die Zeile destinationChild unter dem übergeordneten destinationParent verschoben.
Gibt true
zurück, wenn die Zeilen erfolgreich verschoben wurden; andernfalls wird false
zurückgegeben.
Die Implementierung der Basisklasse tut nichts und gibt false
zurück.
Wenn Sie Ihr eigenes Modell implementieren, können Sie diese Funktion neu implementieren, wenn Sie das Verschieben unterstützen wollen. Alternativ können Sie eine eigene API zum Ändern der Daten bereitstellen.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch beginMoveRows() und endMoveRows().
[virtual, since 6.0]
void QAbstractItemModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const
Füllt die roleDataSpan mit den angeforderten Daten für die angegebene index.
Die Standardimplementierung ruft einfach data() für jede Rolle in der Spanne auf. Eine Unterklasse kann diese Funktion neu implementieren, um Daten für Ansichten effizienter bereitzustellen:
void MyModel::multiData(const QModelIndex &index, QModelRoleDataSpan roleDataSpan) const { for (QModelRoleData &roleData : roleDataSpan) { int role = roleData.role(); // ... obtain the data for index and role ... roleData.setData(result); } }
In dem obigen Ausschnitt ist index
für den gesamten Aufruf gleich. Das bedeutet, dass der Zugriff auf die erforderlichen Datenstrukturen, um die Informationen für index
abzurufen, nur einmal erfolgen muss (indem der entsprechende Code aus der Schleife herausgezogen wird).
Die Verwendung von QModelRoleData::setData(), oder ähnlich QVariant::setValue(), wird gegenüber der separaten Konstruktion eines QVariant und der Verwendung eines einfachen Zuweisungsoperators empfohlen; dies liegt daran, dass erstere die Wiederverwendung des bereits für das QVariant -Objekt zugewiesenen Speichers ermöglichen, der in einem QModelRoleData gespeichert ist, während letztere immer die neue Variante zuweisen und dann die alte zerstören.
Beachten Sie, dass Ansichten multiData() mit Spans aufrufen können, die bereits in früheren Aufrufen verwendet wurden und daher bereits Daten enthalten können. Daher ist es zwingend erforderlich, dass das Modell, wenn es die Daten für eine bestimmte Rolle nicht zurückgeben kann, die Daten im entsprechenden QModelRoleData Objekt löschen muss. Dies kann durch den Aufruf von QModelRoleData::clearData() geschehen, oder in ähnlicher Weise durch das Setzen einer Vorgabe, die aus QVariant konstruiert wurde, usw. Werden die Daten nicht gelöscht, so glaubt die Ansicht, dass die "alten" Daten für die entsprechende Rolle verwendet werden sollen.
Um Code-Duplizierung zu vermeiden, kann eine Unterklasse auch beschließen, data() in Form von multiData() neu zu implementieren, indem sie eine Spanne von nur einem Element liefert:
QVariant MyModel::data(const QModelIndex &index, int role) const { QModelRoleData roleData(role); multiData(index, roleData); return roleData.data(); }
Hinweis: Modelle dürfen die Rollen in der Spanne nicht ändern oder die Elemente der Spanne neu anordnen. Dies führt zu einem undefinierten Verhalten.
Hinweis: Es ist illegal, einen ungültigen Modellindex an diese Funktion zu übergeben.
Diese Funktion wurde in Qt 6.0 eingeführt.
Siehe auch QModelRoleDataSpan und data().
[pure virtual invokable]
QModelIndex QAbstractItemModel::parent(const QModelIndex &index) const
Gibt das übergeordnete Element des Modells mit dem angegebenen index zurück. Wenn das Element kein übergeordnetes Element hat, wird ein ungültiges QModelIndex zurückgegeben.
Eine übliche Konvention, die in Modellen verwendet wird, die Baumdatenstrukturen darstellen, ist, dass nur Elemente in der ersten Spalte Kinder haben. In diesem Fall würde bei einer Neuimplementierung dieser Funktion in einer Unterklasse die Spalte der zurückgegebenen QModelIndex 0 sein.
Achten Sie bei der Neuimplementierung dieser Funktion in einer Unterklasse darauf, den Aufruf von QModelIndex Mitgliedsfunktionen wie QModelIndex::parent() zu vermeiden, da Indizes, die zu Ihrem Modell gehören, einfach Ihre Implementierung aufrufen werden, was zu einer unendlichen Rekursion führt.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch createIndex().
[protected]
QModelIndexList QAbstractItemModel::persistentIndexList() const
Gibt die Liste der Indizes zurück, die als persistente Indizes im Modell gespeichert sind.
[invokable]
bool QAbstractItemModel::removeColumn(int column, const QModelIndex &parent = QModelIndex())
Entfernt die angegebene column aus den untergeordneten Elementen der angegebenen parent.
Gibt true
zurück, wenn die Spalte entfernt wurde; andernfalls wird false
zurückgegeben.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch removeColumns(), removeRow(), und insertColumn().
[virtual invokable]
bool QAbstractItemModel::removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())
Entfernt bei Modellen, die dies unterstützen, count Spalten, die mit dem angegebenen column beginnen, unter dem übergeordneten parent aus dem Modell.
Gibt true
zurück, wenn die Spalten erfolgreich entfernt wurden; andernfalls false
.
Die Implementierung der Basisklasse tut nichts und gibt false
zurück.
Wenn Sie Ihr eigenes Modell implementieren, können Sie diese Funktion reimplementieren, wenn Sie das Entfernen unterstützen wollen. Alternativ können Sie eine eigene API zum Ändern der Daten bereitstellen.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch removeColumn(), removeRows(), insertColumns(), beginRemoveColumns(), und endRemoveColumns().
[invokable]
bool QAbstractItemModel::removeRow(int row, const QModelIndex &parent = QModelIndex())
Entfernt die angegebene row aus den untergeordneten Elementen der angegebenen parent.
Gibt true
zurück, wenn die Zeile entfernt wurde; andernfalls wird false
zurückgegeben.
Dies ist eine Komfortfunktion, die removeRows() aufruft. Die QAbstractItemModel Implementierung von removeRows() tut nichts.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch removeRows(), removeColumn(), und insertRow().
[virtual invokable]
bool QAbstractItemModel::removeRows(int row, int count, const QModelIndex &parent = QModelIndex())
Entfernt bei Modellen, die dies unterstützen, count Zeilen, beginnend mit dem angegebenen row unter dem übergeordneten parent aus dem Modell.
Gibt true
zurück, wenn die Zeilen erfolgreich entfernt wurden; andernfalls false
.
Die Implementierung der Basisklasse tut nichts und gibt false
zurück.
Wenn Sie Ihr eigenes Modell implementieren, können Sie diese Funktion reimplementieren, wenn Sie das Entfernen unterstützen wollen. Alternativ können Sie eine eigene API zum Ändern der Daten bereitstellen.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch removeRow(), removeColumns(), insertColumns(), beginRemoveRows(), und endRemoveRows().
[virtual protected slot]
void QAbstractItemModel::resetInternalData()
Dieser Slot wird aufgerufen, kurz nachdem die internen Daten eines Modells gelöscht wurden, während es zurückgesetzt wird.
Dieser Slot dient der Bequemlichkeit von Unterklassen von konkreten Proxy-Modellen, wie z.B. Unterklassen von QSortFilterProxyModel, die zusätzliche Daten verwalten.
class CustomDataProxy : public QSortFilterProxyModel { Q_OBJECT public: CustomDataProxy(QObject *parent) : QSortFilterProxyModel(parent) { } ... QVariant data(const QModelIndex &index, int role) override { if (role != Qt::BackgroundRole) return QSortFilterProxyModel::data(index, role); if (m_customData.contains(index.row())) return m_customData.value(index.row()); return QSortFilterProxyModel::data(index, role); } private slots: void resetInternalData() { m_customData.clear(); } private: QHash<int, QVariant> m_customData; };
Hinweis: Aufgrund eines Fehlers fehlt dieser Slot in Qt 5.0.
Siehe auch modelAboutToBeReset() und modelReset().
[virtual slot]
void QAbstractItemModel::revert()
Teilt dem Modell mit, dass es zwischengespeicherte Informationen verwerfen soll. Diese Funktion wird typischerweise für die Zeilenbearbeitung verwendet.
Siehe auch submit().
[virtual]
QHash<int, QByteArray> QAbstractItemModel::roleNames() const
Gibt die Rollennamen des Modells zurück.
Die Standard Rollennamen die von Qt gesetzt werden sind:
Qt-Rolle | QML-Rollenname |
---|---|
Qt::DisplayRole | Anzeige |
Qt::DecorationRole | Dekoration |
Qt::EditRole | bearbeiten |
Qt::ToolTipRole | toolTip |
Qt::StatusTipRole | statusTip |
Qt::WhatsThisRole | whatsThis |
[pure virtual invokable]
int QAbstractItemModel::rowCount(const QModelIndex &parent = QModelIndex()) const
Gibt die Anzahl der Zeilen unter dem angegebenen parent zurück. Wenn das Elternteil gültig ist, bedeutet dies, dass rowCount die Anzahl der Kinder des Elternteils zurückgibt.
Hinweis: Bei der Implementierung eines tabellenbasierten Modells sollte rowCount() 0 zurückgeben, wenn der Elternteil gültig ist.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch columnCount().
[private signal]
void QAbstractItemModel::rowsAboutToBeInserted(const QModelIndex &parent, int start, int end)
Dieses Signal wird ausgegeben, kurz bevor Zeilen in das Modell eingefügt werden. Die neuen Elemente werden zwischen start und end einschließlich, unter dem angegebenen Element parent positioniert.
Hinweis: Komponenten, die mit diesem Signal verbunden sind, verwenden es, um sich an Änderungen der Abmessungen des Modells anzupassen. Es kann nur von der QAbstractItemModel Implementierung ausgesendet werden und kann nicht explizit in Unterklassen-Code ausgesendet werden.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, aber nicht vom Benutzer ausgegeben werden.
Siehe auch insertRows() und beginInsertRows().
[private signal]
void QAbstractItemModel::rowsAboutToBeMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow)
Dieses Signal wird ausgegeben, kurz bevor Zeilen innerhalb des Modells verschoben werden. Die Elemente, die verschoben werden, sind die zwischen sourceStart und sourceEnd einschließlich, unter dem angegebenen Element sourceParent. Sie werden nach destinationParent verschoben, beginnend mit der Zeile destinationRow.
Hinweis: Komponenten, die mit diesem Signal verbunden sind, verwenden es, um sich an Änderungen in den Dimensionen des Modells anzupassen. Es kann nur von der QAbstractItemModel Implementierung ausgesendet werden und kann nicht explizit in Unterklassencode ausgesendet werden.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, aber nicht vom Benutzer ausgegeben werden.
Siehe auch beginMoveRows().
[private signal]
void QAbstractItemModel::rowsAboutToBeRemoved(const QModelIndex &parent, int first, int last)
Dieses Signal wird ausgesendet, kurz bevor Zeilen aus dem Modell entfernt werden. Die Elemente, die entfernt werden, sind die zwischen first und last einschließlich, unter dem angegebenen Element parent.
Hinweis: Komponenten, die mit diesem Signal verbunden sind, verwenden es, um sich an Änderungen in den Dimensionen des Modells anzupassen. Es kann nur von der QAbstractItemModel Implementierung ausgesendet werden und kann nicht explizit in Unterklassencode ausgesendet werden.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, aber nicht vom Benutzer ausgegeben werden.
Siehe auch removeRows() und beginRemoveRows().
[private signal]
void QAbstractItemModel::rowsInserted(const QModelIndex &parent, int first, int last)
Dieses Signal wird ausgegeben, nachdem Zeilen in das Modell eingefügt worden sind. Die neuen Elemente sind diejenigen zwischen first und last einschließlich, unter dem angegebenen Element parent.
Hinweis: Komponenten, die mit diesem Signal verbunden sind, verwenden es, um sich an Änderungen in den Dimensionen des Modells anzupassen. Es kann nur von der QAbstractItemModel Implementierung ausgesendet werden und kann nicht explizit in Unterklassencode ausgesendet werden.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, aber nicht vom Benutzer ausgegeben werden.
Siehe auch insertRows() und beginInsertRows().
[private signal]
void QAbstractItemModel::rowsMoved(const QModelIndex &sourceParent, int sourceStart, int sourceEnd, const QModelIndex &destinationParent, int destinationRow)
Dieses Signal wird ausgegeben, nachdem Zeilen innerhalb des Modells verschoben worden sind. Die Elemente zwischen sourceStart und sourceEnd einschließlich, unter dem angegebenen Element sourceParent wurden nach destinationParent verschoben, beginnend mit der Zeile destinationRow.
Hinweis: Komponenten, die mit diesem Signal verbunden sind, verwenden es, um sich an Änderungen in den Dimensionen des Modells anzupassen. Es kann nur von der QAbstractItemModel Implementierung ausgegeben werden, und kann nicht explizit in Unterklassencode ausgegeben werden.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, aber nicht vom Benutzer ausgegeben werden.
Siehe auch beginMoveRows().
[private signal]
void QAbstractItemModel::rowsRemoved(const QModelIndex &parent, int first, int last)
Dieses Signal wird ausgegeben, nachdem Zeilen aus dem Modell entfernt worden sind. Die entfernten Elemente sind diejenigen zwischen first und last einschließlich, unter dem angegebenen Element parent.
Hinweis: Komponenten, die mit diesem Signal verbunden sind, verwenden es, um sich an Änderungen in den Dimensionen des Modells anzupassen. Es kann nur von der QAbstractItemModel Implementierung ausgesendet werden und kann nicht explizit in Unterklassencode ausgesendet werden.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, aber nicht vom Benutzer ausgegeben werden.
Siehe auch removeRows() und beginRemoveRows().
[virtual invokable]
bool QAbstractItemModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)
Setzt die Daten von role für das Element unter index auf value.
Gibt bei Erfolg true
zurück, andernfalls false
.
Das Signal dataChanged() sollte ausgegeben werden, wenn die Daten erfolgreich gesetzt wurden.
Die Implementierung der Basisklasse gibt false
zurück. Diese Funktion und data() müssen für editierbare Modelle reimplementiert werden.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch Qt::ItemDataRole, data(), und itemData().
[virtual]
bool QAbstractItemModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole)
Setzt die Daten für die angegebenen role und section in der Kopfzeile mit dem angegebenen orientation auf das übergebene value.
Gibt true
zurück, wenn die Daten des Headers aktualisiert wurden; andernfalls false
.
Bei einer Neuimplementierung dieser Funktion muss das Signal headerDataChanged() explizit ausgegeben werden.
Siehe auch Qt::ItemDataRole und headerData().
[virtual]
bool QAbstractItemModel::setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles)
Setzt die Rollendaten für das Element unter index auf den zugehörigen Wert in roles, für jedes Qt::ItemDataRole.
Gibt bei Erfolg true
zurück, andernfalls false
.
Rollen, die nicht in roles enthalten sind, werden nicht geändert.
Siehe auch setData(), data(), und itemData().
[virtual invokable]
QModelIndex QAbstractItemModel::sibling(int row, int column, const QModelIndex &index) const
Gibt die Geschwister unter row und column für das Element unter index zurück, oder ein ungültiges QModelIndex, wenn es an dieser Stelle keine Geschwister gibt.
sibling() ist lediglich eine Komfortfunktion, die das übergeordnete Element findet und es verwendet, um den Index des untergeordneten Elements in den angegebenen row und column abzurufen.
Diese Methode kann optional zur implementierungsspezifischen Optimierung überschrieben werden.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
Siehe auch index(), QModelIndex::row(), und QModelIndex::column().
[virtual invokable]
void QAbstractItemModel::sort(int column, Qt::SortOrder order = Qt::AscendingOrder)
Sortiert das Modell nach column in der angegebenen order.
Die Implementierung der Basisklasse tut nichts.
Hinweis: Diese Funktion kann über das Meta-Objektsystem und von QML aus aufgerufen werden. Siehe Q_INVOKABLE.
[virtual]
QSize QAbstractItemModel::span(const QModelIndex &index) const
Gibt den Zeilen- und Spaltenbereich des durch index dargestellten Elements zurück.
Hinweis: Derzeit wird span nicht verwendet.
[virtual slot]
bool QAbstractItemModel::submit()
Teilt dem Modell mit, dass es zwischengespeicherte Informationen an den permanenten Speicher übermitteln soll. Diese Funktion wird in der Regel für die Zeilenbearbeitung verwendet.
Gibt true
zurück, wenn kein Fehler aufgetreten ist; andernfalls gibt sie false
zurück.
Siehe auch revert().
[virtual]
Qt::DropActions QAbstractItemModel::supportedDragActions() const
Gibt die Aktionen zurück, die von den Daten in diesem Modell unterstützt werden.
Die Standardimplementierung gibt supportedDropActions() zurück. Reimplementieren Sie diese Funktion, wenn Sie zusätzliche Aktionen unterstützen wollen.
supportedDragActions() wird von QAbstractItemView::startDrag() als Standardwerte verwendet, wenn ein Ziehen stattfindet.
Siehe auch Qt::DropActions und Verwenden von Drag and Drop mit Elementansichten.
[virtual]
Qt::DropActions QAbstractItemModel::supportedDropActions() const
Gibt die von diesem Modell unterstützten Drop-Aktionen zurück.
Die Standardimplementierung gibt Qt::CopyAction zurück. Reimplementieren Sie diese Funktion, wenn Sie zusätzliche Aktionen unterstützen möchten. Sie müssen auch die Funktion dropMimeData() neu implementieren, um die zusätzlichen Operationen zu verarbeiten.
Siehe auch dropMimeData(), Qt::DropActions und Verwenden von Drag & Drop mit Elementansichten.
© 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.