Sur cette page

SortFilterProxyModel QML Type

Fournit des capacités de tri et de filtrage pour un QAbstractItemModel. Plus....

Import Statement: import QtQml.Models
Since: Qt 6.10
Status: Preliminary

Ce type est en cours de développement et peut être modifié.

Propriétés

Méthodes

Description détaillée

SortFilterProxyModel hérite de QAbstractProxyModel, qui gère la transformation des index source en index proxy. Le tri et le filtrage sont contrôlés par les propriétés sorters et filters, qui déterminent l'ordre d'exécution tel qu'il est spécifié en QML. Cet ordre peut être modifié à l'aide de la propriété priority disponible pour chaque trieur. Par défaut, tous les trieurs ont la même priorité.

SortFilterProxyModel permet aux utilisateurs de trier et de filtrer un site QAbstractItemModel. Les vues d'éléments telles que TableView ou TreeView peuvent utiliser ce modèle proxy pour afficher le contenu filtré.

Remarque : actuellement, SortFilterProxyModel ne prend en charge que QAbstractItemModel en tant que modèle source.

L'extrait ci-dessous montre la configuration des trieurs et des filtres dans le modèle QML SortFilterProxyModel :

ProcessModel { id: processModel }

SortFilterProxyModel {
    id: sfpm
    model: processModel
    sorters: [
        RoleSorter {
            roleName: "user"
            priority: 0
        },
        RoleSorter {
            roleName: "pid"
            priority: 1
        }
    ]
    filters: [
        FunctionFilter {
            component RoleData: QtObject { property qreal cpuUsage }
            function filter(data: RoleData) : bool {
                return (data.cpuUsage > 90)
            }
        }
    ]
}

Le SortFilterProxyModel trie et filtre dynamiquement les données à chaque modification des données dans le modèle source et peut être désactivé par le biais de la propriété dynamicSortFilter.

Les trieurs RoleSorter, StringSorter et FunctionSorter peuvent être configurés dans SortFilterProxyModel. Chaque trieur peut être configuré avec un index de colonne spécifique via la propriété column. Si aucun indice de colonne n'est spécifié, le tri sera appliqué par défaut à l'indice de colonne 0 du modèle. L'ordre d'exécution du trieur peut être modifié grâce à la propriété priority. Cette propriété est particulièrement utile pour effectuer des tris hiérarchiques, comme le tri des données dans la première colonne, puis l'application du tri aux colonnes suivantes.

Pour désactiver un trieur spécifique, la propriété enabled peut être remplacée par la propriété false.

La priorité du trieur peut également être modifiée en définissant le trieur primaire par l'intermédiaire de l'appel de méthode setPrimarySorter(). Cela peut s'avérer utile lorsque la vue souhaite trier les données d'une colonne spécifique en cliquant sur l'en-tête de la colonne, comme dans TableView, alors que d'autres trieurs sont également configurés pour le modèle.

Les filtres ValueFilter et FunctionFilter peuvent être configurés dans SortFilterProxyModel. Chaque filtre peut être défini à l'aide de la propriété column, comme le trieur, pour filtrer les données dans une colonne spécifique. Si aucune colonne n'est spécifiée, le filtre sera appliqué à tous les index de colonne du modèle. Pour réduire la surcharge des vérifications non souhaitées lors du filtrage, il est recommandé de spécifier l'index de la colonne.

Pour désactiver un filtre spécifique, enabled peut être défini comme false.

ListModel {
    id: listModel
    ListElement { name: "Adan"; age: 25; department: "Process"; pid: 209711; country: "Norway" }
    ListElement { name: "Hannah"; age: 48; department: "HR"; pid: 154916; country: "Germany" }
    ListElement { name: "Divina"; age: 63; department: "Marketing"; pid: 158038; country: "Spain" }
    ListElement { name: "Rohith"; age: 35; department: "Process"; pid: 202582; country: "India" }
    ListElement { name: "Latesha"; age: 23; department: "Quality"; pid: 232582; country: "UK" }
}

SortFilterProxyModel {
    id: ageFilterModel
    model: listModel
    filters: [
        AgeFilter { }
    ]
    sorters: [
        RoleSorter { roleName: "department" }
    ]
}

ListView {
    anchors.fill: parent
    clip: true
    model: ageFilterModel
    delegate: Rectangle {
        implicitWidth: 100
        implicitHeight: 50
        border.width: 1
        Text {
            text: name
            anchors.centerIn: parent
        }
    }
}

Le filtre AgeFilter dans l'extrait de code ci-dessus peut être déclaré comme suit

FunctionFilter {
   component RoleData: QtObject { property int age }
   function filter(data: RoleData) : bool {
      return data.age > 30
   }
}

Note : Cette API est considérée comme un aperçu technique et peut être modifiée ou supprimée dans les futures versions de Qt.

Documentation sur les propriétés

autoAcceptChildRows : bool

Cette propriété ne filtrera pas les enfants des lignes acceptées. Le comportement est similaire à celui de autoAcceptChildRows dans QSortFilterProxyModel.

La valeur par défaut est false.

dynamicSortFilter : bool

Cette propriété indique si le modèle proxy est trié et filtré dynamiquement lorsque le contenu du modèle source change.

La valeur par défaut est true.

filters : list<Filter>

Cette propriété contient la liste des filtres pour le site SortFilterProxyModel. Si aucune priorité n'est définie, le site SortFilterProxyModel applique un filtre dans l'ordre spécifié dans la liste.

model : var

Cette propriété permet de définir le modèle source pour le modèle proxy du filtre de tri.

recursiveFiltering : bool

Cette propriété permet d'appliquer tous les filtres configurés de manière récursive sur les enfants. Le comportement est similaire à celui de recursiveFilteringEnabled dans QSortFilterProxyModel.

La valeur par défaut est false.

sorters : list<Sorter>

Cette propriété contient la liste des trieurs pour le site SortFilterProxyModel. Si aucune priorité n'est définie, le site SortFilterProxyModel applique un trieur dans l'ordre spécifié dans la liste.

Documentation de la méthode

void invalidate()

Cette méthode invalide le modèle en réévaluant les filtres et trieurs configurés sur les données du modèle source.

void invalidateSorter()

Cette méthode force le modèle proxy de filtre de tri à réévaluer les trieurs configurés par rapport aux données. Elle peut être utilisée dans le cas où le tri dynamique a été désactivé par la propriété dynamicSortFilter

void setPrimarySorter(sorter)

Cette méthode permet de définir le trieur principal dans le modèle proxy du filtre de tri. Le trieur primaire sera évalué avant tous les autres trieurs configurés dans le cadre de la propriété sorter. S'il n'est pas configuré ou s'il est transmis à null, le trieur ayant la priorité la plus élevée sera considéré comme le trieur primaire.

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