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>
方法
- invalidate()
- invalidateSorter()
- 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: [ 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 } } }
注意: この API は技術プレビューであり、Qt の将来のバージョンで変更または削除される可能性があります。
プロパティの説明
autoAcceptChildRows : bool |
このプロパティは、受理された行の子をフィルタリングしません。この動作は、QSortFilterProxyModel の autoAcceptChildRows に似ています。
デフォルト値はfalse
です。
dynamicSortFilter : bool |
このプロパティは、ソースモデルの内容が変更されるたびに、プロキシモデルが動的にソートおよびフィルタリングされるかどうかを保持します。
既定値はtrue
です。
このプロパティは、SortFilterProxyModel のフィルタのリストを保持します。優先順位が設定されていない場合、SortFilterProxyModel は、リストで指定された順序でフィルタを適用します。
model : var |
このプロパティでは、ソート・フィルタ・プロキシ・モデルのソース・モデルを設定できます。
recursiveFiltering : bool |
このプロパティは、設定されたすべてのフィルタを子に対して再帰的に適用することを可能にする。動作は、QSortFilterProxyModel の recursiveFilteringEnabled に似ています。
デフォルト値はfalse
です。
このプロパティは、SortFilterProxyModel のソーターのリストを保持します。優先順位が設定されていない場合、SortFilterProxyModel は、リストで指定された順序でソーターを適用します。
メソッドのドキュメント
invalidate() |
このメソッドは、構成されたフィルタとソータをソース・モデルのデータ上で再評価することにより、モデルを無効にします。
invalidateSorter() |
このメソッドは、ソート・フィルター・プロキシ・モデルに、データに対して設定されたソーターを再評価させます。プロパティによって動的ソートが無効になっている場合に使用できます。dynamicSortFilter
setPrimarySorter(sorter) |
このメソッドは、ソートフィルタプロキシモデルにプライマリソータを設定します。プライマリソーターは、sorter プロパティの一部として設定された他のすべてのソーターの前に評価されます。設定されていない場合、またはnull
に渡された場合、より高い優先順位を持つソーターがプライマリーソーターとみなされます。
© 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.