이 페이지에서

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.