DelegateModel QML Type

Kapselt ein Modell und einen Delegaten. Mehr...

Import Statement: import QtQml.Models

Eigenschaften

Beigefügte Eigenschaften

Methoden

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.


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
}

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.