TreeModel QML Type

Kapselt ein einfaches Baummodell. Mehr...

Import Statement: import Qt.labs.qmlmodels
Since: Qt 6.10

Eigenschaften

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 [read-only]

Diese schreibgeschützte Eigenschaft enthält die Anzahl der Spalten des Modells.

Die Anzahl der Spalten ist für die Lebensdauer des Modells festgelegt, nachdem die Eigenschaft rows festgelegt oder appendRow() zum ersten Mal aufgerufen wurde.


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)

Hängt treeRow an den Wurzelknoten an.

Siehe auch setRow() und removeRow().


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.

Siehe auch setRow() und removeRow().


clear()

Entfernt alle Zeilen aus dem Modell.

Siehe auch removeRow().


variant data(QModelIndex index, string role)

Gibt die Daten von TreeModel an der angegebenen index zurück, die zu der angegebenen role gehören.

Siehe auch index() und setData().


object getRow(const QModelIndex &rowIndex)

Gibt die treeRow unter rowIndex im Modell zurück.

Hinweis: Das zurückgegebene Objekt kann nicht verwendet werden, um den Inhalt des Modells zu ändern; verwenden Sie stattdessen setTreeRow().

Siehe auch setRow(), appendRow(), und removeRow().


QModelIndex index(list<int> treeIndex, int column)

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.

  • Die Wurzel des Baums ist etwas Besonderes, da sie durch einen ungültigen QModelIndex referenziert werden kann.
  • Der Knoten A ist das erste Kind der Wurzel und die entsprechende treeIndex ist [0].
  • Knoten B ist das erste Kind von Knoten A. Da treeIndex von A [0] ist, wird treeIndex von B [0,0] sein.
  • Der Knoten C ist das zweite Kind von A und sein treeIndex ist [0,1].
  • Der Knoten D ist das dritte Kind von A und sein treeIndex ist [0,2].
  • Der Knoten E ist das zweite Kind der Wurzel und sein treeIndex ist [1].
  • Der Knoten F ist das dritte Kind der Wurzel und sein treeIndex ist [2].

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().


QModelIndex index(int row, int column, object parent)

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().


bool setData(QModelIndex index, variant value, string role)

Fügt das durch role benannte Datenfeld in der TreeRow an der angegebenen index mit value ein oder aktualisiert es. Gibt true zurück wenn erfolgreich, false wenn nicht.

Siehe auch data() und index().


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.