このページでは

SortFilterProxyModel QML Type

QAbstractItemModel に対する並べ替えおよびフィルタリング機能を提供します。詳細...

Import Statement: import QtQml.Models
Since: Qt 6.10
Status: Technology preview

この型はテクノロジープレビュー段階にあり、変更される可能性があります。

プロパティ

方法

詳細な説明

SortFilterProxyModelは、ソースインデックスからプロキシインデックスへの変換を処理するQAbstractProxyModel を継承しています。ソートとフィルタリングは、sorters およびfilters プロパティによって制御され、これらはQMLで指定された実行順序を決定します。この順序は、各ソーターで利用可能なpriorityプロパティを使用して上書きできます。デフォルトでは、すべてのソーターは同じ優先度を共有します。

SortFilterProxyModel を使用すると、QAbstractItemModel のソートやフィルタリングが可能になります。TableView やTreeView などのアイテムビューは、このプロキシモデルを利用してフィルタリングされたコンテンツを表示できます。

注:現在 、SortFilterProxyModel はソースモデルとしてQAbstractItemModel のみをサポートしています。

以下のスニペットは、QMLのSortFilterProxyModelにおけるソーターとフィルターの設定例を示しています:

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)
            }
        }
    ]
}

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
    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
        }
    }
}

上記のコードスニペットにある AgeFilter は、次のように宣言できます。

FunctionFilter {
   function filter(age: int) : bool {
      return age > 30
   }
}

注:この API はテクニカルプレビューとみなされており、将来の Qt バージョンで変更または削除される可能性があります。

プロパティのドキュメント

autoAcceptChildRows : bool

このプロパティは、承認済み行の子行を除外しません。この動作は、QSortFilterProxyModel の `autoAcceptChildRows` の動作と似ています。

デフォルト値は `false` です。

dynamicSortFilter : bool

このプロパティは、ソースモデルの内容が変更されるたびに、プロキシモデルが動的にソートおよびフィルタリングされるかどうかを指定します。

デフォルト値はtrue です。

filters : list<FilterBase>

このプロパティには、SortFilterProxyModel のフィルタの一覧が格納されます。優先順位が設定されていない場合、SortFilterProxyModel は、リストに指定された順序でフィルタを適用します。

recursiveFiltering : bool

このプロパティを使用すると、設定されたすべてのフィルタを子要素に対して再帰的に適用することができます。この動作は、QSortFilterProxyModel の `recursiveFilteringEnabled ` と同様です。

デフォルト値は `false` です。

sorters : list<Sorter>

このプロパティには、SortFilterProxyModel のソーターのリストが格納されます。優先順位が設定されていない場合、SortFilterProxyModel はリストに指定された順序でソーターを適用します。

sourceModel : var

このプロパティを使用すると、ソートフィルタープロキシモデルのソースモデルを設定できます。値はQAbstractItemModel 型である必要があります。

メソッドのドキュメント

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.