Sur cette page

DelegateModel QML Type

Encapsule un modèle et un délégué. En savoir plus…

Import Statement: import QtQml.Models

Propriétés

Propriétés associées

Méthodes

Description détaillée

Le type DelegateModel encapsule un modèle et le délégué qui sera instancié pour les éléments du modèle.

Il n’est généralement pas nécessaire de créer un DelegateModel. Cependant, cela peut s’avérer utile pour manipuler et accéder à l’ modelIndex lorsqu’une sous-classe de QAbstractItemModel est utilisée comme modèle. De plus, DelegateModel est utilisé conjointement avec Package pour fournir des délégués à plusieurs vues, et avec DelegateModelGroup pour trier et filtrer les éléments délégués.

DelegateModel ne prend en charge que les modèles unidimensionnels : l’affectation d’un modèle de table à DelegateModel, puis de celui-ci à TableView, n’affichera donc qu’une seule colonne.

L'exemple ci-dessous illustre l'utilisation d'un DelegateModel avec un 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
    }
}

Documentation sur les propriétés

count : int

delegate : Component

Le délégué fournit un modèle définissant chaque élément instancié par une vue. L'index est accessible via la propriété ` index `. Les propriétés du modèle sont également disponibles, en fonction du type de modèle de données.

delegateModelAccess : enumeration [since 6.10]

Cette propriété détermine la manière dont les délégués peuvent accéder au modèle.

ConstanteDescription
DelegateModel.ReadOnlyInterdit aux délégués d'écrire dans le modèle via les propriétés de contexte, l'objet ` model ` ou les propriétés obligatoires.
DelegateModel.ReadWriteAutorise les délégués à modifier le modèle via les propriétés de contexte, l'objet ` model ` ou les propriétés obligatoires.
DelegateModel.Qt5ReadWriteAutorise les délégués à modifier le modèle via l'objet ` model ` et les propriétés de contexte, mais pas via les propriétés obligatoires.

La valeur par défaut est « DelegateModel.Qt5ReadWrite ».

Cette propriété a été introduite dans Qt 6.10.

Voir également Modèles et vues dans Qt Quick#Modification des données du modèle.

filterOnGroup : string

Cette propriété contient le nom du groupe utilisé pour filtrer le modèle de délégué.

Seuls les éléments appartenant à ce groupe sont visibles dans une vue.

Par défaut, il s'agit du groupe « items ».

groups : list<DelegateModelGroup>

Cette propriété contient les définitions de groupes d'un modèle délégué.

Les groupes définissent un sous-ensemble des éléments d'un modèle de délégué et peuvent être utilisés pour filtrer un modèle.

Pour chaque groupe défini dans un « DelegateModel », deux pseudo-propriétés associées sont ajoutées à chaque élément du délégué. La première, de la forme DelegateModel.inGroupName, indique si l'élément appartient au groupe, et la seconde, DelegateModel.groupNameIndex, contient l'index de l'élément dans ce groupe.

L’exemple suivant illustre l’utilisation des groupes pour sélectionner des éléments dans un modèle.

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
    }
}

Avertissement : contrairement aux propriétés associées normales, celles-ci ne peuvent pas être définies de manière déclarative. Le code suivant générerait une erreur :

delegate: Rectangle {
    DelegateModel.inSelected: true
}

items : DelegateModelGroup

Cette propriété définit le groupe par défaut auquel tous les nouveaux éléments sont ajoutés.

model : model

Cette propriété contient le modèle fournissant les données pour l'DelegateModel.

Le modèle fournit un ensemble de données utilisées pour créer les éléments d’une vue. Pour les ensembles de données volumineux ou dynamiques, le modèle est généralement fourni par un objet modèle C++. L’objet modèle C++ doit être une sous-classe de ` QAbstractItemModel ` ou une simple liste.

Les modèles peuvent également être créés directement en QML, par exemple à l'aide de ` ListModel`.

Voir également Modèles de données.

parts : object

La propriété ` parts ` sélectionne un ` DelegateModel ` qui crée des délégués à partir de la partie indiquée. Elle s'utilise conjointement avec le type ` Package `.

Par exemple, le code ci-dessous sélectionne un modèle qui crée des délégués nommés « list » à partir d’un Package:

DelegateModel {
    id: visualModel
    delegate: Package {
        Item { Package.name: "list" }
    }
    model: myModel
}

ListView {
    width: 200; height:200
    model: visualModel.parts.list
}

Voir également Package.

persistedItems : DelegateModelGroup

Cette propriété contient le groupe d'éléments persistés du modèle délégué.

Les éléments de ce groupe ne sont pas détruits lorsqu’ils sont libérés par une vue ; ils sont au contraire persistés jusqu’à ce qu’ils soient supprimés du groupe.

Un élément peut être retiré du groupe `persistedItems` en définissant la propriété ` DelegateModel.inPersistedItems ` sur `false`. Si l'élément n'est pas référencé par une vue à ce moment-là, il sera détruit. L'ajout d'un élément à ce groupe ne créera pas de nouvelle instance.

Les éléments renvoyés par la fonction ` QtQml.Models::DelegateModelGroup::create()` sont automatiquement ajoutés à ce groupe.

rootIndex : QModelIndex

QAbstractItemModel fournit une arborescence hiérarchique de données, alors que QML ne traite que des données sous forme de liste. La propriété ` rootIndex ` permet à ce modèle de fournir les enfants de n'importe quel nœud d'une arborescence ( QAbstractItemModel ).

Cette propriété n'affecte que les modèles de type « QAbstractItemModel » qui sont hiérarchiques (par exemple, un modèle arborescent).

Voici par exemple un simple navigateur interactif de système de fichiers. Lorsqu’on clique sur le nom d’un répertoire, la propriété ` rootIndex ` de la vue est définie sur le nœud ` QModelIndex ` du répertoire sur lequel on a cliqué, ce qui met à jour la vue pour afficher le contenu du nouveau répertoire.

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)
            }
        }
    }
}

Si l’ model est une sous-classe de QAbstractItemModel, le délégué peut également référencer une propriété hasModelChildren (éventuellement préfixée par « model. ») qui indique si l’élément de modèle du délégué possède des nœuds enfants.

Voir également modelIndex() et parentModelIndex().

Documentation sur les propriétés associées

DelegateModel.groups : list<string> [attached]

Cette propriété associée contient le nom du DelegateModelGroups auquel l'élément appartient.

Elle est associée à chaque instance du délégué.

DelegateModel.inItems : bool [attached]

Cette propriété indiqu items e si l'élément appartient à la collection par défaut DelegateModelGroup.

La modification de cette propriété ajoute ou supprime l'élément du groupe d'éléments.

Elle est associée à chaque instance du délégué.

DelegateModel.inPersistedItems : bool [attached]

Cette propriété associée indique si l'élément appartient au groupe « persistedItems » DelegateModelGroup.

La modification de cette propriété ajoute ou supprime l'élément du groupe d'éléments. Procédez avec prudence, car la suppression d'un élément du groupe « persistedItems » détruira l'instance actuelle si celle-ci n'est pas référencée par un modèle.

Elle est associée à chaque instance du délégué.

DelegateModel.isUnresolved : bool [attached]

Cette propriété associée indique si l'élément visuel est lié à un index du modèle de données. Elle renvoie « true » si l'élément n'est pas lié au modèle, et « false » s'il l'est.

Un élément non résolu peut être lié au modèle de données à l'aide de la fonction ` DelegateModelGroup::resolve()`.

Elle est associée à chaque instance du délégué.

DelegateModel.itemsIndex : int [attached]

Cette propriété associée contient l'index de l'élément dans la liste par défaut items DelegateModelGroup .

Elle est associée à chaque instance du délégué.

DelegateModel.model : model [attached]

Cette propriété associée contient le modèle de données auquel appartient cette instance de délégué.

Elle est associée à chaque instance du délégué.

DelegateModel.persistedItemsIndex : int [attached]

Cette propriété associée contient l'index de l'élément dans la collection « persistedItems » DelegateModelGroup.

Elle est associée à chaque instance du délégué.

Documentation de la méthode

QModelIndex modelIndex(int index)

QAbstractItemModel fournit une arborescence hiérarchique de données, alors que QML ne traite que des données sous forme de liste. Cette fonction facilite l'utilisation des modèles arborescents dans QML.

Renvoie un objet ` QModelIndex ` correspondant à l'index` spécifié. Cette valeur peut être attribuée à ` rootIndex`.

Voir aussi ` rootIndex`.

QModelIndex parentModelIndex()

QAbstractItemModel fournit une arborescence hiérarchique de données, alors que QML ne traite que des données sous forme de liste. Cette fonction facilite l’utilisation des modèles arborescents dans QML.

Renvoie un objet ` QModelIndex ` correspondant au parent de l'rootIndex` actuel. Cette valeur peut être attribuée à ` rootIndex`.

Voir également ` rootIndex`.

© 2026 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.