SortFilterProxyModel QML Type
Offre des fonctionnalités de tri et de filtrage pour une QAbstractItemModel. En savoir plus...
| Import Statement: | import QtQml.Models |
| Since: | Qt 6.10 |
| Status: | Technology preview |
Ce type est en préversion technologique et est susceptible d'être modifié.
Propriétés
- autoAcceptChildRows : bool
- dynamicSortFilter : bool
- filters : list<FilterBase>
- recursiveFiltering : bool
- sorters : list<Sorter>
- sourceModel : var
Méthodes
- void invalidate()
- void invalidateSorter()
- void setPrimarySorter(sorter)
Description détaillée
SortFilterProxyModel hérite de QAbstractProxyModel, qui gère la transformation des index sources en index proxy. Le tri et le filtrage sont contrôlés via les propriétés sorters et filters, qui déterminent l’ordre d’exécution tel que spécifié dans QML. Cet ordre peut être redéfini à l’aide de la propriété priority disponible pour chaque trieur. Par défaut, tous les trieurs partagent la même priorité.
SortFilterProxyModel permet aux utilisateurs de trier et de filtrer un QAbstractItemModel. Les vues d’éléments telles que TableView ou TreeView peuvent utiliser ce modèle proxy pour afficher du contenu filtré.
Remarque : actuellement , SortFilterProxyModel ne prend en charge que QAbstractItemModel comme modèle source.
L'extrait de code ci-dessous montre la configuration des trieurs et des filtres dans le SortFilterProxyModel QML :
ProcessModel { id: processModel }
SortFilterProxyModel {
id: sfpm
sourceModel: processModel
sorters: [
RoleSorter {
roleName: "user"
priority: 0
},
RoleSorter {
roleName: "pid"
priority: 1
}
]
filters: [
FunctionFilter {
function filter(cpuUsage: real) : bool {
return (cpuUsage > 90)
}
}
]
}Le SortFilterProxyModel trie et filtre dynamiquement les données dès qu’une modification intervient dans le modèle source ; il peut être désactivé via 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 index de colonne n’est spécifié, le tri s’appliquera par défaut à l’index de colonne 0 du modèle. L’ordre d’exécution du trieur peut être modifié via la propriété ` priority `. Cela s’avère particulièrement utile lors d’un tri hiérarchique, par exemple pour trier les données de la première colonne puis appliquer le tri aux colonnes suivantes.
Pour désactiver un trieur spécifique, la propriété ` enabled ` peut être définie sur ` false`.
La priorité d’un trieur peut également être remplacée en définissant le trieur principal via l’appel de méthode ` setPrimarySorter()`. Cela s’avère utile lorsque la vue souhaite trier les données d’une colonne spécifique en cliquant sur l’en-tête de 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, de la même manière que pour le trieur, afin de filtrer les données d’une colonne spécifique. Si aucune colonne n’est spécifiée, le filtre s’appliquera à tous les index de colonnes du modèle. Afin de réduire la charge liée aux vérifications superflues lors du filtrage, il est recommandé de préciser l’index de la colonne.
Pour désactiver un filtre spécifique, il est possible de définir ` enabled ` sur ` 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
sourceModel: 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 {
function filter(age: int) : bool {
return age > 30
}
}Remarque : cette API est considérée comme une préversion technique et peut être modifiée ou supprimée dans les futures versions de Qt.
Documentation des propriétés
autoAcceptChildRows : bool
Cette propriété ne filtrera pas les enfants des lignes acceptées. Son comportement est similaire à celui de la propriété `autoAcceptChildRows` décrite à l'adresse QSortFilterProxyModel.
La valeur par défaut est « false ».
dynamicSortFilter : bool
Cette propriété détermine si le modèle proxy est trié et filtré de manière dynamique à chaque fois que le contenu du modèle source change.
La valeur par défaut est « true ».
filters : list<FilterBase>
Cette propriété contient la liste des filtres pour l'SortFilterProxyModel. Si aucune priorité n'est définie, l'SortFilterProxyModel applique les filtres dans l'ordre indiqué dans la liste.
recursiveFiltering : bool
Cette propriété permet d'appliquer de manière récursive tous les filtres configurés aux éléments enfants. Son 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 triageurs pour l'SortFilterProxyModel. Si aucune priorité n'est définie, l'SortFilterProxyModel applique un triageur dans l'ordre indiqué dans la liste.
sourceModel : var
Cette propriété permet de définir le modèle source pour le modèle proxy du filtre de tri. La valeur doit être de type « QAbstractItemModel ».
Documentation de la méthode
void invalidate()
Cette méthode invalide le modèle en réévaluant les filtres et les critères de tri configurés sur les données du modèle source.
void invalidateSorter()
Cette méthode oblige le modèle de proxy du filtre de tri à réévaluer les trieurs configurés par rapport aux données. Elle peut être utilisée lorsque le tri dynamique a été désactivé via la propriété dynamicSortFilter
void setPrimarySorter(sorter)
Cette méthode permet de définir le trieur principal dans le modèle de proxy de filtre de tri. Le trieur principal sera évalué avant tous les autres trieurs configurés dans le cadre de la propriété ` sorter `. S’il n’est pas configuré ou si la valeur ` null` n’est pas fournie, le trieur ayant la priorité la plus élevée sera considéré comme le trieur principal.
© 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.