SortFilterProxyModel QML Type
Proporciona funciones de clasificación y filtrado para un QAbstractItemModel. Más...
| Import Statement: | import QtQml.Models |
| Since: | Qt 6.10 |
| Status: | Preliminary |
Este tipo está en desarrollo y está sujeto a cambios.
Propiedades
- autoAcceptChildRows : bool
- dynamicSortFilter : bool
- filters : list<Filter>
- model : var
- recursiveFiltering : bool
- sorters : list<Sorter>
Métodos
- void invalidate()
- void invalidateSorter()
- void setPrimarySorter(sorter)
Descripción detallada
SortFilterProxyModel hereda de QAbstractProxyModel, que gestiona la transformación de índices fuente en índices proxy. La ordenación y el filtrado se controlan mediante las propiedades sorters y filters, que determinan el orden de ejecución especificado en QML. Este orden puede anularse mediante la propiedad priority disponible para cada clasificador. Por defecto, todos los clasificadores comparten la misma prioridad.
SortFilterProxyModel permite a los usuarios ordenar y filtrar un QAbstractItemModel. Las vistas de elementos como TableView o TreeView pueden utilizar este modelo proxy para mostrar el contenido filtrado.
Nota: actualmente, SortFilterProxyModel sólo admite QAbstractItemModel como modelo de origen.
El siguiente fragmento muestra la configuración de clasificadores y filtros en el 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)
}
}
]
}El SortFilterProxyModel ordena y filtra dinámicamente los datos cada vez que se produce un cambio en los datos del modelo de origen y puede desactivarse a través de la propiedad dynamicSortFilter.
Los clasificadores RoleSorter, StringSorter y FunctionSorter se pueden configurar en SortFilterProxyModel. Cada clasificador puede configurarse con un índice de columna específico a través de la propiedad column. Si no se especifica un índice de columna, la ordenación se aplicará al índice de columna 0 del modelo por defecto. El orden de ejecución del clasificador puede modificarse a través de la propiedad priority. Esto es especialmente útil cuando se realiza una ordenación jerárquica, como ordenar los datos de la primera columna y luego aplicar la ordenación a las columnas siguientes.
Para desactivar un ordenador específico, enabled puede establecerse en false.
La prioridad del clasificador también se puede anular estableciendo el clasificador primario a través de la llamada al método setPrimarySorter(). Esto sería útil en el caso de que la vista quiera ordenar los datos de cualquier columna específica haciendo clic en la cabecera de la columna como en TableView, cuando hay otros ordenadores también configurados para el modelo.
El filtro ValueFilter y FunctionFilter se pueden configurar en SortFilterProxyModel. Cada filtro se puede configurar con la propiedad column, de forma similar al clasificador, para filtrar datos en una columna específica. Si no se especifica ninguna columna, el filtro se aplicará a todos los índices de columna del modelo. Para reducir la sobrecarga de comprobaciones no deseadas durante el filtrado, se recomienda especificar el índice de la columna.
Para desactivar un filtro específico, enabled se puede establecer en 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 } } }
El filtro AgeFilter del fragmento de código anterior puede declararse como sigue
FunctionFilter { component RoleData: QtObject { property int age } function filter(data: RoleData) : bool { return data.age > 30 } }
Nota: Esta API se considera tech preview y puede cambiar o ser eliminada en futuras versiones de Qt.
Documentación de propiedades
autoAcceptChildRows : bool
Esta propiedad no filtrará los hijos de las filas aceptadas. El comportamiento es similar al de autoAcceptChildRows en QSortFilterProxyModel.
El valor por defecto es false.
dynamicSortFilter : bool
Esta propiedad establece si el modelo proxy se ordena y filtra dinámicamente cada vez que cambia el contenido del modelo fuente.
El valor por defecto es true.
filters : list<Filter>
Esta propiedad contiene la lista de filtros para SortFilterProxyModel. Si no se establece ninguna prioridad, SortFilterProxyModel aplica un filtro en el orden especificado en la lista.
model : var
Esta propiedad permite establecer el modelo fuente para el modelo proxy del filtro de ordenación.
recursiveFiltering : bool
Esta propiedad permite aplicar recursivamente sobre los hijos todos los filtros configurados. El comportamiento es similar al de recursiveFilteringEnabled en QSortFilterProxyModel.
El valor por defecto es false.
sorters : list<Sorter>
Esta propiedad contiene la lista de clasificadores para SortFilterProxyModel. Si no se establece ninguna prioridad, SortFilterProxyModel aplica un clasificador en el orden especificado en la lista.
Documentación del método
void invalidate()
Este método invalida el modelo reevaluando los filtros y clasificadores configurados en los datos del modelo de origen.
void invalidateSorter()
Este método fuerza al modelo proxy del filtro de ordenación a reevaluar los ordenadores configurados contra los datos. Puede utilizarse en el caso de que se haya desactivado la ordenación dinámica mediante la propiedad dynamicSortFilter
void setPrimarySorter(sorter)
Este método permite establecer el clasificador primario en el modelo proxy del filtro de clasificación. El clasificador primario se evaluará antes que el resto de clasificadores configurados como parte de la propiedad sorter. Si no se configura o se pasa null, se considerará como clasificador primario el clasificador con mayor prioridad.
© 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.