SortFilterProxyModel QML Type

QAbstractItemModel...에 대한 정렬 및 필터링 기능을 제공합니다... .

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

이 유형은 개발 중이며 변경될 수 있습니다.

속성

방법

상세 설명

SortFilterProxyModel은 소스 인덱스의 프록시 인덱스 변환을 처리하는 QAbstractProxyModel 에서 상속합니다. 정렬 및 필터링은 sortersfilters 속성을 통해 제어되며, 이 속성은 QML에 지정된 대로 실행 순서를 결정합니다. 이 순서는 각 소터에 사용할 수 있는 우선순위 속성을 사용하여 재정의할 수 있습니다. 기본적으로 모든 정렬기는 동일한 우선순위를 공유합니다.

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 속성을 통해 비활성화할 수 있습니다.

RoleSorter, StringSorterFunctionSorter 소터는 SortFilterProxyModel에서 구성할 수 있습니다. 각 소터는 column 속성을 통해 특정 열 인덱스로 구성할 수 있습니다. 컬럼 인덱스를 지정하지 않으면 기본적으로 모델의 컬럼 인덱스 0에 정렬이 적용됩니다. priority 속성을 통해 소터의 실행 순서를 수정할 수 있습니다. 이는 첫 번째 열에서 데이터를 정렬한 다음 후속 열에 정렬을 적용하는 등 계층적 정렬을 수행할 때 특히 유용합니다.

특정 소터를 사용하지 않으려면 enabledfalse 으로 설정할 수 있습니다.

setPrimarySorter 메서드 호출을 통해 기본 소터를 설정하여 소터 우선순위를 재정의할 수도 있습니다. 이는 TableView 에서와 같이 뷰에서 열 머리글을 클릭하여 특정 열의 데이터를 정렬하려는 경우 모델에 대해 다른 소터가 구성되어 있는 경우에 유용합니다.

ValueFilterFunctionFilter 필터는 SortFilterProxyModel에서 구성할 수 있습니다. 각 필터는 소터와 마찬가지로 column 속성을 사용하여 특정 열의 데이터를 필터링하도록 설정할 수 있습니다. 열을 지정하지 않으면 모델의 모든 열 인덱스에 필터가 적용됩니다. 필터링 중에 원치 않는 검사로 인한 오버헤드를 줄이려면 열 인덱스를 지정하는 것이 좋습니다.

특정 필터를 비활성화하려면 enabledfalse 으로 설정할 수 있습니다.

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 입니다.


filters : list<Filter>

이 속성은 SortFilterProxyModel 에 대한 필터 목록을 보유합니다. 우선 순위가 설정되지 않은 경우 SortFilterProxyModel 은 목록에 지정된 순서대로 필터를 적용합니다.


model : var

이 속성을 사용하면 정렬 필터 프록시 모델에 대한 소스 모델을 설정할 수 있습니다.


recursiveFiltering : bool

이 속성을 사용하면 구성된 모든 필터가 하위 필터에 재귀적으로 적용될 수 있습니다. 동작은 QSortFilterProxyModel 의 recursiveFilteringEnabled 와 유사합니다.

기본값은 false 입니다.


sorters : list<Sorter>

이 속성은 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.