TreeModel QML Type
Kapselt ein einfaches Baummodell. Mehr...
Import Statement: | import Qt.labs.qmlmodels |
Since: | Qt 6.10 |
Eigenschaften
- columnCount : int
- rows : object
Methoden
- appendRow(object treeRow)
- appendRow(QModelIndex parent, object treeRow)
- clear()
- variant data(QModelIndex index, string role)
- object getRow(const QModelIndex &rowIndex)
- QModelIndex index(list<int> treeIndex, int column)
- QModelIndex index(int row, int column, object parent)
- removeRow(QModelIndex rowIndex)
- bool setData(QModelIndex index, variant value, string role)
- setRow(QModelIndex rowIndex, object treeRow)
Detaillierte Beschreibung
Der Typ TreeModel speichert JavaScript/JSON-Objekte als Daten für ein Baummodell, das mit TreeView verwendet werden kann. Er soll sehr einfache Modelle unterstützen, ohne dass eine eigene QAbstractItemModel Unterklasse in C++ erstellt werden muss.
import QtQuick import QtQuick.Controls import Qt.labs.qmlmodels ApplicationWindow { visible: true width: 500 height: 500 TreeView { id: treeView anchors.fill: parent selectionModel: ItemSelectionModel {} model: TreeModel { id: treeModel TableModelColumn { display: "checked" } TableModelColumn { display: "size" } TableModelColumn { display: "type" } TableModelColumn { display: "name" } TableModelColumn { display: "lastModified" } rows: [{ checked: false, size: "—", type: "folder", name: "Documents", lastModified: "2025-07-01", rows: [{ checked: true, size: "24 KB", type: "file", name: "Resume.pdf", lastModified: "2025-06-20", }, { checked: false, size: "2 MB", type: "folder", name: "Reports", lastModified: "2025-06-10", rows: [{ checked: true, size: "850 KB", type: "file", name: "Q2_Report.docx", lastModified: "2025-06-15", }, { checked: false, size: "1.2 MB", type: "file", name: "Q3_Plan.xlsx", lastModified: "2025-06-18", }] }] }, { checked: false, size: "—", type: "folder", name: "Pictures", lastModified: "2025-05-30", rows: [{ checked: true, size: "3.5 MB", type: "file", name: "Vacation.jpg", lastModified: "2025-05-15", }, { checked: false, size: "2.1 MB", type: "file", name: "Family.png", lastModified: "2025-05-20", }] } ] } delegate: TreeViewDelegate {} } }
Die Anfangsdaten des Modells werden entweder mit der Eigenschaft rows oder durch den Aufruf von appendRow() festgelegt. Jede Spalte im Modell wird durch die Deklaration einer TableModelColumn Instanz spezifiziert, wobei die Reihenfolge jeder Instanz ihren Spaltenindex bestimmt. Sobald das Signal Component::completed() des Modells ausgegeben wurde, sind die Spalten und Rollen festgelegt und gelten für die gesamte Lebensdauer des Modells.
Unterstützte Zeilen-Datenstrukturen
Jede Zeile stellt einen Knoten im Baum dar. Jeder Knoten hat den gleichen Typ von Spalten. Das TreeModel ist so konzipiert, dass es mit JavaScript/JSON-Daten arbeitet, so dass jede Zeile eine Liste von einfachen Schlüssel-Wert-Paaren ist:
{ checked: false, size: "—", type: "folder", name: "Pictures", lastModified: "2025-05-30", rows: [{ checked: true, size: "3.5 MB", type: "file", name: "Vacation.jpg", lastModified: "2025-05-15", }, { checked: false, size: "2.1 MB", type: "file", name: "Family.png", lastModified: "2025-05-20", }] }
Ein Knoten kann untergeordnete Knoten haben und diese werden in einem Array gespeichert, das mit dem Schlüssel "rows" verbunden ist. "rows" ist für diesen Zweck reserviert: nur die Liste der Kindknoten sollte mit diesem Schlüssel verknüpft werden.
Das Modell wird über QModelIndices manipuliert. Um auf eine bestimmte Zeile/einen bestimmten Knoten zuzugreifen, kann die Funktion getRow() verwendet werden. Es ist auch möglich, über die Eigenschaft rows direkt auf die JavaScript-Daten des Modells zuzugreifen, aber es ist nicht möglich, die Modelldaten auf diese Weise zu ändern.
Um neue Zeilen hinzuzufügen, verwenden Sie appendRow(). Um bestehende Zeilen zu ändern, verwenden Sie setRow(), removeRow() und clear().
Eigenschaft Dokumentation
columnCount : int |
rows : object |
Diese Eigenschaft enthält die Modelldaten in Form eines Arrays von Zeilen.
Siehe auch getRow(), setRow(), appendRow(), clear(), und columnCount.
Methode Dokumentation
appendRow(object treeRow) |
appendRow(QModelIndex parent, object treeRow) |
Hängt eine neue treeRow an parent an, mit den Werten (Zellen) in treeRow.
treeModel.appendRow(index, { checked: false, size: "-", type: "folder", name: "Orders", lastModified: "2025-07-02", rows: [ { checked: true, size: "38 KB", type: "file", name: "monitors.xlsx", lastModified: "2025-07-02" }, { checked: true, size: "54 KB", type: "file", name: "notebooks.xlsx", lastModified: "2025-07-02" } ] });
Wenn parent ungültig ist, wird treeRow an den Wurzelknoten angehängt.
clear() |
Entfernt alle Zeilen aus dem Modell.
Siehe auch removeRow().
object getRow(const QModelIndex &rowIndex) |
Gibt ein QModelIndex Objekt zurück, das auf die angegebenen treeIndex und column verweist. Dieses Objekt kann an die Funktion data() übergeben werden, um die Daten aus dieser Zelle zu erhalten, oder an setData(), um den Inhalt dieser Zelle zu bearbeiten.
Der erste Parameter treeIndex stellt einen Pfad von Zeilennummern dar, der von der Wurzel bis zur gewünschten Zeile reicht, und wird für die Navigation innerhalb des Baums verwendet. Dies lässt sich am besten anhand eines Beispiels erklären.
|
Mit dieser Überladung ist es möglich, eine QModelIndex zu einem Knoten zu erhalten, ohne eine QModelIndex zu seinem Elternknoten zu haben.
Wenn kein Knoten durch die angegebene Liste gefunden wird, wird ein ungültiger Modellindex zurückgegeben. Bitte beachten Sie, dass ein ungültiger Modellindex die Wurzel des Knotens referenziert.
Siehe auch QModelIndex und verwandte Klassen in QML und data().
Gibt ein QModelIndex -Objekt zurück, das auf die angegebenen row und column einer gegebenen parent verweist. Dieses Objekt kann an die Funktion data() übergeben werden, um die Daten aus dieser Zelle zu erhalten, oder an setData(), um den Inhalt dieser Zelle zu bearbeiten.
Siehe auch QModelIndex und verwandte Klassen in QML und data().
removeRow(QModelIndex rowIndex) |
Entfernt die von rowIndex referenzierte TreeRow aus dem Model.
treeModel.removeTreeRow(rowIndex)
Siehe auch clear().
setRow(QModelIndex rowIndex, object treeRow) |
Ersetzt die TreeRow unter rowIndex im Model durch treeRow. Eine Zeile mit untergeordneten Zeilen wird zurückgewiesen.
Alle Spalten/Zellen müssen in treeRow
vorhanden sein, und zwar in der richtigen Reihenfolge. Die untergeordneten Zeilen der Zeile bleiben davon unberührt.
treeModel.setRow(rowIndex, { checked: true, size: "-", type: "folder", name: "Subtitles", lastModified: "2025-07-07", iconColor: "blue" });
Siehe auch appendRow().
© 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.