SortFilterProxyModel QML Type

Bietet Sortier- und Filtermöglichkeiten für eine QAbstractItemModel. Mehr....

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

Dieser Typ befindet sich in der Entwicklung und kann sich noch ändern.

Eigenschaften

Methoden

Detaillierte Beschreibung

SortFilterProxyModel erbt von QAbstractProxyModel, das die Umwandlung von Quellindizes in Proxy-Indizes übernimmt. Sortierung und Filterung werden über die Eigenschaften sorters und filters gesteuert, die die in QML festgelegte Reihenfolge der Ausführung bestimmen. Diese Reihenfolge kann mit der Eigenschaft priority, die für jeden Sortierer verfügbar ist, außer Kraft gesetzt werden. Standardmäßig haben alle Sortierer die gleiche Priorität.

Mit SortFilterProxyModel können Benutzer ein QAbstractItemModel sortieren und filtern. Die Elementansichten wie TableView oder TreeView können dieses Proxy-Modell verwenden, um gefilterte Inhalte anzuzeigen.

Hinweis: Derzeit unterstützt SortFilterProxyModel nur QAbstractItemModel als Quellmodell.

Das folgende Snippet zeigt die Konfiguration von Sortierern und Filtern im 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)
            }
        }
    ]
}

Das SortFilterProxyModel sortiert und filtert Daten dynamisch, sobald sich die Daten im Quellmodell ändern und kann über die Eigenschaft dynamicSortFilter deaktiviert werden.

Die Sortierer RoleSorter, StringSorter und FunctionSorter können in SortFilterProxyModel konfiguriert werden. Jeder Sortierer kann mit einem bestimmten Spaltenindex über die Eigenschaft column konfiguriert werden. Wenn kein Spaltenindex angegeben wird, wird die Sortierung standardmäßig auf den Spaltenindex 0 des Modells angewendet. Die Ausführungsreihenfolge des Sortierers kann über die Eigenschaft priority geändert werden. Dies ist besonders nützlich, wenn eine hierarchische Sortierung durchgeführt wird, wie z. B. die Sortierung von Daten in der ersten Spalte und die anschließende Anwendung der Sortierung auf die nachfolgenden Spalten.

Um einen bestimmten Sortierer zu deaktivieren, kann enabled auf false gesetzt werden.

Die Sortierpriorität kann auch außer Kraft gesetzt werden, indem der primäre Sortierer durch den Methodenaufruf setPrimarySorter festgelegt wird. Dies wäre hilfreich, wenn die Ansicht die Daten einer bestimmten Spalte sortieren möchte, indem sie auf die Spaltenüberschrift klickt, wie z. B. in TableView, wenn auch andere Sortierer für das Modell konfiguriert sind.

Die Filter ValueFilter und FunctionFilter können im SortFilterProxyModel konfiguriert werden. Jeder Filter kann mit der Eigenschaft column eingestellt werden, ähnlich wie der Sortierer, um Daten in einer bestimmten Spalte zu filtern. Wenn keine Spalte angegeben wird, wird der Filter auf alle Spaltenindizes im Modell angewendet. Um den Overhead von unerwünschten Überprüfungen während des Filterns zu reduzieren, ist es empfehlenswert, den Spaltenindex anzugeben.

Um einen bestimmten Filter zu deaktivieren, kann enabled auf false gesetzt werden.

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: [
        FunctionFilter {
            roleData: QtObject { property int age }
            function filter(data: QtObject) : bool {
                return data.age > 30
            }
        }
    ]
    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
        }
    }
}

Hinweis: Diese API wird als technische Vorschau betrachtet und kann sich in zukünftigen Versionen von Qt ändern oder entfernt werden.

Dokumentation der Eigenschaft

autoAcceptChildRows : bool

Diese Eigenschaft filtert Kinder von akzeptierten Zeilen nicht heraus. Das Verhalten ist ähnlich dem von autoAcceptChildRows in QSortFilterProxyModel.

Der Standardwert ist false.


dynamicSortFilter : bool

Diese Eigenschaft legt fest, ob das Proxy-Modell dynamisch sortiert und gefiltert wird, wenn sich der Inhalt des Quellmodells ändert.

Der Standardwert ist true.


filters : list<Filter>

Diese Eigenschaft enthält die Liste der Filter für SortFilterProxyModel. Wenn keine Priorität festgelegt ist, wendet SortFilterProxyModel einen Filter in der Reihenfolge an, die in der Liste angegeben ist.


model : var

Mit dieser Eigenschaft kann das Quellmodell für das Proxy-Modell des Sortierfilters festgelegt werden.


recursiveFiltering : bool

Mit dieser Eigenschaft können alle konfigurierten Filter rekursiv auf Kinder angewendet werden. Das Verhalten ist ähnlich dem von recursiveFilteringEnabled in QSortFilterProxyModel.

Der Standardwert ist false.


sorters : list<Sorter>

Diese Eigenschaft enthält die Liste der Sortierer für SortFilterProxyModel. Wenn keine Priorität festgelegt ist, wendet SortFilterProxyModel einen Sortierer in der Reihenfolge an, die in der Liste angegeben ist.


Methode Dokumentation

invalidate()

Diese Methode macht das Modell ungültig, indem sie die konfigurierten Filter und Sortierer auf die Daten des Quellmodells neu auswertet.


invalidateSorter()

Diese Methode zwingt das Sortierfilter-Proxy-Modell, die konfigurierten Sortierer anhand der Daten neu zu bewerten. Sie kann in dem Fall verwendet werden, wenn die dynamische Sortierung durch die Eigenschaft dynamicSortFilter


setPrimarySorter(sorter)

Mit dieser Methode kann der primäre Sortierer im Sortierfilter-Proxy-Modell festgelegt werden. Der primäre Sortierer wird vor allen anderen Sortierern ausgewertet, die als Teil der Eigenschaft sorter konfiguriert wurden. Falls nicht konfiguriert oder null übergeben, wird der Sorter mit höherer Priorität als primärer Sorter betrachtet.


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