DelegateModel QML Type
Kapselt ein Modell und einen Delegaten. Mehr...
Import Statement: | import QtQml.Models |
Eigenschaften
- count : int
- delegate : Component
- filterOnGroup : string
- groups : list<DelegateModelGroup>
- items : DelegateModelGroup
- model : model
- parts : object
- persistedItems : DelegateModelGroup
- rootIndex : QModelIndex
Beigefügte Eigenschaften
- groups : stringlist
- inItems : bool
- inPersistedItems : bool
- isUnresolved : bool
- itemsIndex : int
- model : model
- persistedItemsIndex : int
Methoden
- QModelIndex modelIndex(int index)
- QModelIndex parentModelIndex()
Detaillierte Beschreibung
Der Typ DelegateModel kapselt ein Modell und den Delegaten, der für Elemente im Modell instanziiert wird.
Es ist normalerweise nicht notwendig, ein DelegateModel zu erstellen. Es kann jedoch für die Bearbeitung und den Zugriff auf die modelIndex nützlich sein, wenn eine QAbstractItemModel Unterklasse als Modell verwendet wird. Außerdem wird DelegateModel zusammen mit Package verwendet, um Delegaten für mehrere Ansichten bereitzustellen, und mit DelegateModelGroup, um Delegatenelemente zu sortieren und zu filtern.
DelegateModel unterstützt nur eindimensionale Modelle - die Zuweisung eines Tabellenmodells an DelegateModel und das an TableView zeigt also nur eine Spalte.
Das folgende Beispiel zeigt die Verwendung eines DelegateModel mit ListView.
import QtQuick import QtQml.Models Rectangle { width: 200; height: 100 DelegateModel { id: visualModel model: ListModel { ListElement { name: "Apple" } ListElement { name: "Orange" } } delegate: Rectangle { height: 25 width: 100 Text { text: "Name: " + name} } } ListView { anchors.fill: parent model: visualModel } }
Dokumentation der Eigenschaften
count : int |
delegate : Component |
Der Delegate bietet eine Vorlage, die jedes Element definiert, das von einer Ansicht instanziiert wird. Der Index ist als zugängliche index
Eigenschaft verfügbar. Die Eigenschaften des Modells sind je nach Art des Datenmodells ebenfalls verfügbar.
filterOnGroup : string |
Diese Eigenschaft enthält den Namen der Gruppe, die zum Filtern des Delegatenmodells verwendet wird.
Nur Elemente, die zu dieser Gruppe gehören, sind für eine Ansicht sichtbar.
Standardmäßig ist dies die Gruppe items.
groups : list<DelegateModelGroup> |
Diese Eigenschaft enthält die Gruppendefinitionen eines Delegatenmodells.
Gruppen definieren eine Teilmenge der Elemente in einem Delegatenmodell und können zum Filtern eines Modells verwendet werden.
Für jede Gruppe, die in DelegateModel definiert ist, werden zwei angehängte Pseudo-Eigenschaften zu jedem Delegatenelement hinzugefügt. Die erste der Form DelegateModel.inGroupName gibt an, ob das Element zu der Gruppe gehört, und die zweite DelegateModel.groupNameIndexgibt den Index des Elements in dieser Gruppe an.
Das folgende Beispiel veranschaulicht die Verwendung von Gruppen zur Auswahl von Elementen in einem Modell.
import QtQuick import QtQml.Models Rectangle { width: 200; height: 100 DelegateModel { id: visualModel model: ListModel { ListElement { name: "Apple" } ListElement { name: "Orange" } } groups: [ DelegateModelGroup { name: "selected" } ] delegate: Rectangle { id: item height: 25 width: 200 Text { text: { var text = "Name: " + name if (item.DelegateModel.inSelected) text += " (" + item.DelegateModel.selectedIndex + ")" return text; } } MouseArea { anchors.fill: parent onClicked: item.DelegateModel.inSelected = !item.DelegateModel.inSelected } } } ListView { anchors.fill: parent model: visualModel } }
Achtung! Im Gegensatz zu normalen angehängten Eigenschaften können diese nicht auf deklarative Weise festgelegt werden. Das folgende Beispiel würde zu einem Fehler führen:
delegate: Rectangle { DelegateModel.inSelected: true }
items : DelegateModelGroup |
Diese Eigenschaft enthält die Standardgruppe, zu der alle neuen Elemente hinzugefügt werden.
model : model |
Diese Eigenschaft enthält das Modell, das Daten für die DelegateModel bereitstellt.
Das Modell stellt eine Reihe von Daten bereit, die zur Erstellung der Elemente für eine Ansicht verwendet werden. Bei großen oder dynamischen Datensätzen wird das Modell normalerweise durch ein C++-Modellobjekt bereitgestellt. Das C++-Modellobjekt muss eine Unterklasse von QAbstractItemModel oder eine einfache Liste sein.
Modelle können auch direkt in QML erstellt werden, zum Beispiel mit ListModel.
Siehe auch Datenmodelle.
parts : object |
Die Eigenschaft parts wählt eine DelegateModel aus, die Delegaten aus dem genannten Teil erstellt. Dies wird in Verbindung mit dem Typ Package verwendet.
Der folgende Code wählt zum Beispiel ein Modell aus, das Delegierte mit dem Namen list aus einem Package erstellt:
DelegateModel { id: visualModel delegate: Package { Item { Package.name: "list" } } model: myModel } ListView { width: 200; height:200 model: visualModel.parts.list }
Siehe auch Package.
persistedItems : DelegateModelGroup |
Diese Eigenschaft enthält die Gruppe der persistierten Elemente des Delegatenmodells.
Elemente in dieser Gruppe werden nicht zerstört, wenn sie von einer Ansicht freigegeben werden, sondern sie bleiben erhalten, bis sie aus der Gruppe entfernt werden.
Ein Element kann aus der Gruppe persistedItems entfernt werden, indem die Eigenschaft DelegateModel.inPersistedItems auf false gesetzt wird. Wenn das Element zu diesem Zeitpunkt nicht von einer Ansicht referenziert wird, wird es zerstört. Durch das Hinzufügen eines Elements zu dieser Gruppe wird keine neue Instanz erstellt.
Elemente, die von der Funktion QtQml.Models::DelegateModelGroup::create() zurückgegeben werden, werden automatisch zu dieser Gruppe hinzugefügt.
rootIndex : QModelIndex |
QAbstractItemModel stellt einen hierarchischen Baum von Daten zur Verfügung, während QML nur mit Listendaten arbeitet. rootIndex
erlaubt es, dass die Kinder eines jeden Knotens in einem QAbstractItemModel von diesem Modell bereitgestellt werden.
Diese Eigenschaft betrifft nur Modelle des Typs QAbstractItemModel, die hierarchisch sind (z.B. ein Baummodell).
Hier ist zum Beispiel ein einfacher interaktiver Dateisystem-Browser. Wenn ein Verzeichnisname angeklickt wird, wird der rootIndex
der Ansicht auf den QModelIndex Knoten des angeklickten Verzeichnisses gesetzt, wodurch die Ansicht aktualisiert wird, um den Inhalt des neuen Verzeichnisses anzuzeigen.
main.cpp
:
int main(int argc, char ** argv) { QGuiApplication app(argc, argv); QQuickView view; QFileSystemModel model; // start populating the model (doesn't change the model's root) model.setRootPath(QDir::currentPath()); qmlRegisterSingletonInstance("FileSystemModule", 1, 0, "FileSystemModel", &model); view.setSource(QUrl::fromLocalFile("view.qml")); view.show(); return app.exec(); }
view.qml
:
import QtQuick import QtQml.Models import FileSystemModule pragma ComponentBehavior: Bound ListView { id: view width: 300 height: 400 model: DelegateModel { id: delegateModel model: FileSystemModel // singleton delegate: Rectangle { id: delegate required property int index required property string filePath required property bool hasModelChildren width: 300; height: 25 color: index % 2 ? palette.alternateBase : palette.base Text { anchors.verticalCenter: parent.verticalCenter color: palette.text text: delegate.filePath } TapHandler { onTapped: if (delegate.hasModelChildren) delegateModel.rootIndex = delegateModel.modelIndex(delegate.index) } } } }
Wenn die model eine QAbstractItemModel Unterklasse ist, kann der Delegat auch eine hasModelChildren
Eigenschaft referenzieren (optional qualifiziert durch ein model. Präfix), die anzeigt, ob das Modellelement des Delegaten irgendwelche Kindknoten hat.
Siehe auch modelIndex() und parentModelIndex().
Angehängte Eigenschaft Dokumentation
DelegateModel.groups : stringlist |
Diese angehängte Eigenschaft enthält den Namen der DelegateModelGroups zu denen das Element gehört.
Sie wird an jede Instanz des Delegaten angehängt.
DelegateModel.inItems : bool |
Diese angehängte Eigenschaft gibt an, ob das Element zur Standardgruppe items DelegateModelGroup gehört.
Durch Ändern dieser Eigenschaft wird das Element der Elementgruppe hinzugefügt oder entfernt.
Sie ist an jede Instanz des Delegaten angehängt.
DelegateModel.inPersistedItems : bool |
Diese angehängte Eigenschaft gibt an, ob das Element zu persistedItems DelegateModelGroup gehört.
Durch Ändern dieser Eigenschaft wird das Element zur Elementgruppe hinzugefügt oder daraus entfernt. Ändern Sie diese Eigenschaft mit Bedacht, da das Entfernen eines Elements aus der Gruppe persistedItems die aktuelle Instanz zerstört, wenn sie nicht von einem Modell referenziert wird.
Sie ist mit jeder Instanz des Delegaten verbunden.
DelegateModel.isUnresolved : bool |
Diese angehängte Eigenschaft gibt an, ob das visuelle Element an einen Datenmodellindex gebunden ist. Gibt true zurück, wenn das Element nicht an das Modell gebunden ist, und false, wenn es das ist.
Ein nicht aufgelöstes Element kann mit der Funktion DelegateModelGroup::resolve() an das Datenmodell gebunden werden.
Es wird an jede Instanz des Delegaten angehängt.
DelegateModel.itemsIndex : int |
Diese angehängte Eigenschaft enthält den Index des Elements in der Standard items DelegateModelGroup .
Sie wird an jede Instanz des Delegaten angehängt.
DelegateModel.model : model |
Diese angehängte Eigenschaft enthält das Datenmodell, zu dem diese Delegateninstanz gehört.
Sie ist an jede Instanz des Delegaten angehängt.
DelegateModel.persistedItemsIndex : int |
Diese angehängte Eigenschaft enthält den Index des Elements in der persistedItems DelegateModelGroup .
Sie ist an jede Instanz des Delegaten angehängt.
Methode Dokumentation
QModelIndex modelIndex(int index) |
QAbstractItemModel bietet einen hierarchischen Baum von Daten, während QML nur mit Listendaten arbeitet. Diese Funktion hilft bei der Verwendung von Baummodellen in QML.
Gibt ein QModelIndex für die angegebene index zurück. Dieser Wert kann rootIndex zugewiesen werden.
Siehe auch rootIndex.
QModelIndex parentModelIndex() |
QAbstractItemModel liefert einen hierarchischen Baum von Daten, während QML nur mit Listendaten arbeitet. Diese Funktion hilft bei der Verwendung von Baummodellen in QML.
Gibt eine QModelIndex für den Elternteil des aktuellen rootIndex zurück. Dieser Wert kann rootIndex zugewiesen werden.
Siehe auch rootIndex.
© 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.