SortFilterProxyModel QML Type
QAbstractItemModel のソートとフィルタリング機能を提供する。
| Import Statement: | import QtQml.Models |
| Since: | Qt 6.10 |
| Status: | Preliminary |
この型は開発中であり、変更される可能性があります。
プロパティ
- autoAcceptChildRows : bool
- dynamicSortFilter : bool
- filters : list<Filter>
- model : var
- recursiveFiltering : bool
- sorters : list<Sorter>
方法
- void invalidate()
- void invalidateSorter()
- void setPrimarySorter(sorter)
詳細な説明
SortFilterProxyModel はQAbstractProxyModel を継承し、ソースインデックスからプロキシインデックスへの変換を行います。ソートとフィルタリングはsorters とfilters プロパティによって制御され、QML で指定された実行順序を決定します。この順序は、各ソーターで利用可能な priority プロパティを使って上書きすることができます。デフォルトでは、すべてのソーターは同じ優先順位を共有します。
SortFilterProxyModel は、QAbstractItemModel のソートとフィルタリングを可能にします。TableView やTreeView のようなアイテムビューは、フィルタリングされたコンテンツを表示するために、このプロキシモデルを利用することができます。
注: 現在、SortFilterProxyModel はソースモデルとしてQAbstractItemModel のみをサポートしています。
以下のスニペットは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)
}
}
]
}SortFilterProxyModel はソースモデルのデータが変更されるたびに動的にソートとフィルタリングを行い、dynamicSortFilter プロパティによって無効にすることができます。
SortFilterProxyModel では、ソーターRoleSorter 、StringSorter 、FunctionSorter を設定することができます。各ソーターは、column プロパティを通して、特定の列インデックスで構成することができます。カラムインデックスが指定されない場合、ソートはデフォルトでモデルのカラムインデックス0に適用されます。ソーターの実行順序は、priority プロパティを通して変更することができます。これは、最初の列でデータをソートし、その後に続く列にソートを適用するような、階層的なソートを実行する場合に特に便利です。
特定のソーターを無効にするには、enabled をfalse に設定する。
ソーターの優先順位は、setPrimarySorter() メソッド呼び出しでプライマリー・ソーターを設定することで上書きすることもできる。これは、TableView のように、ビューがカラムヘッダーをクリックして特定のカラムのデータをソートしたい場合に役立ちます。
フィルタValueFilter とFunctionFilter は SortFilterProxyModel で設定することができます。各フィルタはソータと同様にcolumn プロパティで設定することができ、特定の列のデータをフィルタリングすることができます。カラムが指定されない場合、フィルタはモデル内のすべてのカラムインデックスに適用されます。フィルタリング中の不要なチェックのオーバーヘッドを減らすために、列インデックスを指定することをお勧めします。
特定のフィルタを無効にするには、enabled を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 } } }
上記のコードスニペットにおけるAgeFilterは、以下のように宣言できます。
FunctionFilter { component RoleData: QtObject { property int age } function filter(data: RoleData) : bool { return data.age > 30 } }
注意: この API は技術プレビューであり、Qt の将来のバージョンで変更または削除される可能性があります。
プロパティのドキュメント
autoAcceptChildRows : bool
このプロパティは、受け付けた行の子をフィルタリングしない。この動作は、QSortFilterProxyModel の autoAcceptChildRows に似ています。
デフォルト値はfalse です。
dynamicSortFilter : bool
このプロパティは、ソース・モデルのコンテンツが変更されるたびに、プロキシ・モデルが動的にソートおよびフィルタリングされるかどうかを保持します。
デフォルト値はtrue です。
filters : list<Filter>
このプロパティは、SortFilterProxyModel に対するフィルタのリストを保持する。優先順位が設定されていない場合、SortFilterProxyModel は、リストで指定された順序でフィルタを適用する。
model : var
このプロパティは、ソートフィルタプロキシモデルのソースモデルを設定することができます。
recursiveFiltering : bool
このプロパティは、設定されたすべてのフィルタを子に対して再帰的に適用することを可能にする。動作はQSortFilterProxyModel のrecursiveFilteringEnabled と似ています。
デフォルト値はfalse です。
sorters : list<Sorter>
このプロパティは、SortFilterProxyModel のソーターのリストを保持します。優先順位が設定されていない場合、SortFilterProxyModel はリストで指定された順序でソーターを適用します。
メソッド・ドキュメント
void invalidate()
このメソッドは、設定されたフィルタとソータをソースモデルデータ上で再評価することで、モデルを無効にします。
void invalidateSorter()
このメソッドは、設定されたソーターをデータに対して再評価するよう、ソートフィルタープロキシモデルに強制します。このメソッドは、プロパティdynamicSortFilter
void setPrimarySorter(sorter)
このメソッドは、ソートフィルタープロキシモデルにプライマリソーターを設定することができます。プライマリソーターはsorter プロパティの一部として設定された他のすべてのソーターの前に評価されます。設定されていない場合、またはnull に渡された場合、より高い優先順位を持つソーターがプライマリーソーターとみなされます。
© 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.