이 페이지에서

QSortFilterProxyModel Class

SortFilterProxyModel 클래스는 다른 모델과 뷰 간에 전달되는 데이터의 정렬 및 필터링을 지원합니다. 더 보기...

헤더: #include <QSortFilterProxyModel>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
상속: QAbstractProxyModel

공개 유형

(since 6.12) enum class DataChangeRelevanceFlag { NotRelevant, RelevantForFiltering, RelevantForSorting, RelevantForFilteringAndSorting }
flags DataChangeRelevanceFlags
(since 6.10) enum class Direction { Rows, Columns, Both }
flags Directions

속성

공개 함수

QSortFilterProxyModel(QObject *parent = nullptr)
virtual ~QSortFilterProxyModel()
bool autoAcceptChildRows() const
QBindable<bool> bindableAutoAcceptChildRows()
QBindable<bool> bindableDynamicSortFilter()
QBindable<Qt::CaseSensitivity> bindableFilterCaseSensitivity()
QBindable<int> bindableFilterKeyColumn()
QBindable<QRegularExpression> bindableFilterRegularExpression()
QBindable<int> bindableFilterRole()
QBindable<bool> bindableIsSortLocaleAware()
QBindable<bool> bindableRecursiveFilteringEnabled()
QBindable<Qt::CaseSensitivity> bindableSortCaseSensitivity()
QBindable<int> bindableSortRole()
bool dynamicSortFilter() const
Qt::CaseSensitivity filterCaseSensitivity() const
int filterKeyColumn() const
QRegularExpression filterRegularExpression() const
int filterRole() const
bool isRecursiveFilteringEnabled() const
bool isSortLocaleAware() const
void setAutoAcceptChildRows(bool accept)
void setDynamicSortFilter(bool enable)
void setFilterCaseSensitivity(Qt::CaseSensitivity cs)
void setFilterKeyColumn(int column)
void setFilterRole(int role)
void setRecursiveFilteringEnabled(bool recursive)
void setSortCaseSensitivity(Qt::CaseSensitivity cs)
void setSortLocaleAware(bool on)
void setSortRole(int role)
Qt::CaseSensitivity sortCaseSensitivity() const
int sortColumn() const
Qt::SortOrder sortOrder() const
int sortRole() const

재구현된 공용 함수

virtual QModelIndex buddy(const QModelIndex &index) const override
virtual bool canFetchMore(const QModelIndex &parent) const override
virtual int columnCount(const QModelIndex &parent = QModelIndex()) const override
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override
virtual void fetchMore(const QModelIndex &parent) override
virtual Qt::ItemFlags flags(const QModelIndex &index) const override
virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const override
virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override
virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override
virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override
virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const override
virtual QItemSelection mapSelectionFromSource(const QItemSelection &sourceSelection) const override
virtual QItemSelection mapSelectionToSource(const QItemSelection &proxySelection) const override
virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const override
virtual QModelIndexList match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const override
virtual QMimeData *mimeData(const QModelIndexList &indexes) const override
virtual QStringList mimeTypes() const override
virtual QModelIndex parent(const QModelIndex &child) const override
virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override
virtual bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) override
virtual void setSourceModel(QAbstractItemModel *sourceModel) override
virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const override
virtual void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override
virtual QSize span(const QModelIndex &index) const override
virtual Qt::DropActions supportedDropActions() const override

공개 슬롯

void invalidate()
void setFilterFixedString(const QString &pattern)
void setFilterRegularExpression(const QString &pattern)
void setFilterRegularExpression(const QRegularExpression &regularExpression)
void setFilterWildcard(const QString &pattern)

신호

(since 6.0) void autoAcceptChildRowsChanged(bool autoAcceptChildRows)
void filterCaseSensitivityChanged(Qt::CaseSensitivity filterCaseSensitivity)
void filterRoleChanged(int filterRole)
void recursiveFilteringEnabledChanged(bool recursiveFilteringEnabled)
void sortCaseSensitivityChanged(Qt::CaseSensitivity sortCaseSensitivity)
void sortLocaleAwareChanged(bool sortLocaleAware)
void sortRoleChanged(int sortRole)

보호된 함수

(since 6.9) void beginFilterChange()
(since 6.12) QSortFilterProxyModel::DataChangeRelevanceFlags dataChangeRelevanceFlags(const QModelIndex &sourceTopLeft, const QModelIndex &sourceBottomRight, const QList<int> &roles) const
(since 6.10) void endFilterChange(QSortFilterProxyModel::Directions directions = Direction::Both)
virtual bool filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const
virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
(since 6.0, until 6.13) void invalidateColumnsFilter()
(until 6.13) void invalidateFilter()
(since 6.0, until 6.13) void invalidateRowsFilter()
virtual bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const

상세 설명

QSortFilterProxyModel은 항목을 정렬하거나, 항목을 필터링하거나, 또는 두 가지 작업을 모두 수행하는 데 사용할 수 있습니다. 이 모델은 소스 모델이 제공하는 인덱스를 뷰에서 사용할 수 있도록 서로 다른 위치에 해당하는 새로운 인덱스로 매핑하여 소스 모델의 구조를 변환합니다. 이 접근 방식을 사용하면 기본 데이터에 대한 변환을 수행하거나 메모리에서 데이터를 복제할 필요 없이, 뷰와 관련하여 주어진 소스 모델의 구조를 재구성할 수 있습니다.

사용자 정의 모델에서 제공하는 항목을 정렬하고 필터링한다고 가정해 봅시다. 정렬 및 필터링 없이 모델과 뷰를 설정하는 코드는 다음과 같습니다:

        QTreeView *treeView = new QTreeView;
        MyItemModel *model = new MyItemModel(this);

        treeView->setModel(model);

MyItemModel 에 정렬 및 필터링 기능을 추가하려면, QSortFilterProxyModel을 생성하고, MyItemModel 을 인수로 전달하여 setSourceModel()을 호출한 다음, 해당 QSortFilterProxyModel을 뷰에 설치해야 합니다:

        QTreeView *treeView = new QTreeView;
        MyItemModel *sourceModel = new MyItemModel(this);
        QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this);

        proxyModel->setSourceModel(sourceModel);
        treeView->setModel(proxyModel);

이 시점에서는 정렬이나 필터링이 활성화되지 않았으며, 뷰에는 원본 데이터가 표시됩니다. QSortFilterProxyModel을 통해 이루어진 모든 변경 사항은 원본 모델에 적용됩니다.

QSortFilterProxyModel은 원본 모델의 래퍼 역할을 합니다. 소스 QModelIndex을 정렬/필터링된 모델 인덱스로 변환하거나 그 반대로 변환해야 하는 경우, mapToSource(), mapFromSource(), mapSelectionToSource() 및 mapSelectionFromSource()을 사용하십시오.

참고: 기본적으로 모델은 원본 모델이 변경될 때마다 데이터를 동적으로 재정렬하고 재필터링합니다. 이 동작은 ` dynamicSortFilter ` 속성을 설정하여 변경할 수 있습니다.

'기본 정렬/필터 모델' 및 '사용자 지정 정렬/필터 모델' 예제는 QSortFilterProxyModel을 사용하여 기본적인 정렬 및 필터링을 수행하는 방법과, 이를 상속하여 사용자 지정 동작을 구현하는 방법을 보여줍니다.

정렬

QTableView 및 QTreeView 에는 사용자가 뷰의 가로 헤더를 클릭하여 뷰를 정렬할 수 있는지 여부를 제어하는 sortingEnabled 속성이 있습니다. 예를 들어:

        treeView->setSortingEnabled(true);

이 기능이 켜져 있을 때(기본값은 꺼짐), 헤더 섹션을 클릭하면 해당 열을 기준으로 항목이 정렬됩니다. 반복해서 클릭하면 오름차순과 내림차순을 번갈아 가며 정렬할 수 있습니다.

정렬된 QTreeView

sort배경에서는 뷰가 모델의 데이터를 재정렬하기 위해 모델의 sort() 가상 함수를 호출합니다. 데이터를 정렬 가능하게 만들려면, 모델에서 ` sort()`을 구현하거나 `QSortFilterProxyModel`을 사용하여 모델을 래핑할 수 있습니다. `QSortFilterProxyModel`은 항목의 ` sortRole()`(기본값은 `Qt::DisplayRole `)을 대상으로 작동하며, ` int`, ` QString`, QDateTime 을 포함한 여러 데이터 유형을 처리합니다. 계층적 모델의 경우, 정렬은 모든 자식 항목에 재귀적으로 적용됩니다. 문자열 비교는 기본적으로 대소문자를 구분하지만, sortCaseSensitivity 속성을 설정하여 이를 변경할 수 있습니다.

사용자 정의 정렬 동작은 QSortFilterProxyModel을 상속하고, 항목 비교에 사용되는 ` lessThan()` 메서드를 재구현하여 구현할 수 있습니다. 예를 들어:

bool MySortFilterProxyModel::lessThan(const QModelIndex &left,
                                      const QModelIndex &right) const
{
    QVariant leftData = sourceModel()->data(left);
    QVariant rightData = sourceModel()->data(right);

    if (leftData.userType() == QMetaType::QDateTime)
        return leftData.toDateTime() < rightData.toDateTime();

    static const QRegularExpression emailPattern(u"[\\w\\.]*@[\\w\\.]*"_s);

    QString leftString = leftData.toString();
    if (left.column() == 1) {
        const QRegularExpressionMatch match = emailPattern.match(leftString);
        if (match.hasMatch())
            leftString = match.captured(0);
    }
    QString rightString = rightData.toString();
    if (right.column() == 1) {
        const QRegularExpressionMatch match = emailPattern.match(rightString);
        if (match.hasMatch())
            rightString = match.captured(0);
    }

    return QString::localeAwareCompare(leftString, rightString) < 0;
}

(이 코드 조각은 ‘사용자 정의 정렬/필터 모델’ 예제에서 발췌한 것입니다.)

정렬에 대한 또 다른 접근 방식은 뷰에서 정렬 기능을 비활성화하고 사용자에게 특정 순서를 강제하는 것입니다. 이는 QSortFilterProxyModel(또는 ` sort()`를 구현하는 경우 원본 모델)에서 원하는 열과 순서를 인수로 지정하여 ` sort()`를 명시적으로 호출함으로써 수행됩니다. 예를 들어:

        proxyModel->sort(2, Qt::AscendingOrder);

QSortFilterProxyModel은 -1번 열을 기준으로 정렬할 수 있으며, 이 경우 기본 소스 모델의 정렬 순서를 반환합니다.

참고: ` sortColumn()`는 가장 최근에 사용된 정렬 열을 반환합니다. 기본값은 -1이며, 이는 이 프록시 모델이 정렬을 수행하지 않음을 의미합니다. 또한, ` sort()`는 ` sortColumn()`를 가장 최근에 사용된 정렬 열로 설정한다는 점에 유의하십시오.

필터링

정렬 외에도 QSortFilterProxyModel을 사용하여 특정 필터 조건에 맞지 않는 항목을 숨길 수 있습니다. 필터는 QRegularExpression 객체를 사용하여 지정되며, 주어진 열에 대해 각 항목의 filterRole()(기본값은Qt::DisplayRole )에 적용됩니다. QRegularExpression 객체는 정규 표현식, 와일드카드 패턴 또는 고정된 문자열과 일치시키는 데 사용할 수 있습니다. 예를 들어:

        proxyModel->setFilterRegularExpression(QRegularExpression("\\.png", QRegularExpression::CaseInsensitiveOption));
        proxyModel->setFilterKeyColumn(1);

계층형 모델의 경우, 필터는 모든 자식 항목에 재귀적으로 적용됩니다. 부모 항목이 필터와 일치하지 않으면 해당 부모 항목의 자식 항목은 하나도 표시되지 않습니다.

일반적인 사용 사례로는 사용자가 ` QLineEdit`에서 필터 정규 표현식, 와일드카드 패턴 또는 고정 문자열을 지정할 수 있도록 하는 것입니다. 이를 위해서는 ` QLineEdit::textChanged()` 또는 ` textEdited()` 신호를 ` setFilterRegularExpression()`, ` setFilterWildcard()` 또는 ` setFilterFixedString()` 중 하나에 연결해야 합니다.

filterAcceptsRow() 및 filterAcceptsColumn() 함수를 재구현하여 사용자 정의 필터링 동작을 구현할 수 있습니다. 예를 들어( ‘Custom Sort/Filter Model’ 예제에서 발췌), 다음 구현은 filterKeyColumn 속성을 무시하고 0, 1, 2번 열에 대해 필터링을 수행합니다:

bool MySortFilterProxyModel::filterAcceptsRow(int sourceRow,
                                              const QModelIndex &sourceParent) const
{
    QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
    QModelIndex index1 = sourceModel()->index(sourceRow, 1, sourceParent);
    QModelIndex index2 = sourceModel()->index(sourceRow, 2, sourceParent);

    return (sourceModel()->data(index0).toString().contains(filterRegularExpression())
            || sourceModel()->data(index1).toString().contains(filterRegularExpression()))
            && dateInRange(sourceModel()->data(index2).toDate());
}

(이 코드 조각은 '사용자 정의 정렬/필터 모델' 예제에서 가져온 것입니다.)

대량의 필터링 작업을 수행하며 beginFilterChange() / endFilterChange()을 반복적으로 호출해야 하는 경우, 모델의 구현 방식에 따라 beginResetModel() / endResetModel()을 사용하는 것이 더 효율적일 수 있습니다. 그러나 beginResetModel() / endResetModel()은 프록시 모델을 원래 상태로 되돌려 선택 정보를 잃게 하며, 프록시 모델이 다시 채워지게 됩니다.

서브클래스 생성

QAbstractProxyModel 와 그 하위 클래스는 QAbstractItemModel 에서 파생되었으므로, 일반 모델의 서브클래싱에 대한 조언 중 상당 부분이 프록시 모델에도 적용됩니다. 또한, 이 클래스의 함수들에 대한 많은 기본 구현은 관련 소스 모델의 동등한 함수를 호출하도록 작성되었다는 점에 유의해야 합니다. 더 복잡한 동작을 가진 소스 모델의 경우, 이 간단한 프록시 메커니즘을 재정의해야 할 수도 있습니다. 예를 들어, 소스 모델이 사용자 정의 ` hasChildren()` 구현을 제공하는 경우, 프록시 모델에서도 이를 제공해야 합니다.

참고: 모델 서브클래스 생성에 대한몇 가지 일반적인 지침은 ‘모델 서브클래스 참조(Model Subclassing Reference)’에서 확인할 수 있습니다.

또한 QAbstractProxyModel, QAbstractItemModel, 모델/뷰 프로그래밍, 기본 정렬/필터 모델 예제, 사용자 정의 정렬/필터 모델 예제 및 QIdentityProxyModel 을참조하십시오 .

멤버 유형 문서

[since 6.12] enum class QSortFilterProxyModel::DataChangeRelevanceFlag
flags QSortFilterProxyModel::DataChangeRelevanceFlags

이 열거형은 소스 변경 사항이 어떤 작업과 관련된 것인지 지정하는 데 사용됩니다.

상수값설명
QSortFilterProxyModel::DataChangeRelevanceFlag::NotRelevant0x00이 변경 사항은 필터링 및 정렬 모두와 관련이 없습니다.
QSortFilterProxyModel::DataChangeRelevanceFlag::RelevantForFiltering0x01변경 사항은 필터링과 정렬 모두와 관련이 없습니다.
QSortFilterProxyModel::DataChangeRelevanceFlag::RelevantForSorting0x02이 변경 사항은 정렬에 영향을 미칩니다
QSortFilterProxyModel::DataChangeRelevanceFlag::RelevantForFilteringAndSortingRelevantForFiltering | RelevantForSorting이 변경 사항은 필터링과 정렬 모두에 영향을 미칩니다

이 열거형은 Qt 6.12에서 도입되었습니다.

DataChangeRelevanceFlags 유형은 QFlags<DataChangeRelevanceFlag>에 대한 typedef입니다. 이 유형은 DataChangeRelevanceFlag 값들의 OR 조합을 저장합니다.

dataChangeRelevanceFlags()도 참조하십시오 .

[since 6.10] enum class QSortFilterProxyModel::Direction
flags QSortFilterProxyModel::Directions

이 열거형은 필터 매개변수가 변경될 때 사용자 정의 필터가 적용되는 방향을 지정하는 데 사용됩니다.

상수값설명
QSortFilterProxyModel::Direction::Rows0x01필터가 적용되는 대상 rows
QSortFilterProxyModel::Direction::Columns0x02필터가 적용되는 대상 columns
QSortFilterProxyModel::Direction::BothRows | Columns이 필터는 행과 열 모두에 적용됩니다

이 열거형은 Qt 6.10에서 도입되었습니다.

Directions 유형은 QFlags<Direction>에 대한 typedef입니다. 이 유형은 Direction 값들의 OR 조합을 저장합니다.

beginFilterChange() 및 endFilterChange()도 참조하십시오 .

속성 문서

[bindable, since 6.0] autoAcceptChildRows : bool

참고: 이 속성은 QProperty 바인딩을 지원합니다.

true인 경우, 프록시 모델은 허용된 행의 자식 행들이 다른 조건에 따라 필터링되어 제외될 수 있더라도 이를 필터링하지 않습니다.

기본값은 false입니다.

이 열거형은 Qt 6.0에서 도입되었습니다.

액세스 함수:

bool autoAcceptChildRows() const
void setAutoAcceptChildRows(bool accept)

Notifier 신호:

void autoAcceptChildRowsChanged(bool autoAcceptChildRows)

recursiveFilteringEnabled 및 filterAcceptsRow()도 참조하십시오 .

[bindable] dynamicSortFilter : bool

참고: 이 속성은 ‘ QProperty ’ 바인딩을 지원합니다.

이 속성은 소스 모델의 내용이 변경될 때마다 프록시 모델이 동적으로 정렬 및 필터링되는지 여부를 나타냅니다.

dynamicSortFilter가 true인 경우 프록시 모델을 통해 소스 모델을 업데이트해서는 안 됩니다. 예를 들어, QComboBox 에 프록시 모델을 설정하는 경우, addItem()와 같이 모델을 업데이트하는 함수를 사용하면 예상대로 작동하지 않습니다. 대안으로 dynamicSortFilter를 false로 설정하고 QComboBox 에 항목을 추가한 후 sort()를 호출할 수 있습니다.

기본값은 true입니다.

액세스 함수:

bool dynamicSortFilter() const
void setDynamicSortFilter(bool enable)

sortColumn()도 참조하십시오 .

[bindable] filterCaseSensitivity : Qt::CaseSensitivity

참고: 이 속성은 QProperty 바인딩을 지원합니다.

이 속성은 소스 모델의 내용을 필터링하는 데 사용되는 QRegularExpression 패턴의 대소문자 구분 여부를 나타냅니다.

기본적으로 필터는 대소문자를 구분합니다.

참고: 이 속성을설정하면 새로운 대소문자 구분이 ` filterRegularExpression ` 속성으로 전달되어 바인딩이 해제됩니다. 마찬가지로 ` filterRegularExpression `를 명시적으로 설정하면 현재 대소문자 구분이 변경되어 바인딩이 해제됩니다.

액세스 함수:

Qt::CaseSensitivity filterCaseSensitivity() const
void setFilterCaseSensitivity(Qt::CaseSensitivity cs)

알림 신호:

void filterCaseSensitivityChanged(Qt::CaseSensitivity filterCaseSensitivity)

filterRegularExpression 및 sortCaseSensitivity도 참조하십시오 .

[bindable] filterKeyColumn : int

참고: 이 속성은 QProperty 바인딩을 지원합니다.

이 속성은 소스 모델의 내용을 필터링하는 데 사용되는 키가 읽혀지는 열을 지정합니다.

기본값은 0입니다. 값이 -1인 경우, 모든 열에서 키가 읽힙니다.

액세스 함수:

int filterKeyColumn() const
void setFilterKeyColumn(int column)

[bindable] filterRegularExpression : QRegularExpression

참고: 이 속성은 QProperty 바인딩을 지원합니다.

이 속성은 소스 모델의 내용을 필터링하는 데 사용되는 QRegularExpression 를 저장합니다.

QRegularExpression 오버로드를 통해 이 속성을 설정하면 현재 ` filterCaseSensitivity` 값이 덮어쓰입니다. 기본적으로 ` QRegularExpression `는 모든 내용과 일치하는 빈 문자열입니다.

QRegularExpression 가 설정되지 않았거나 빈 문자열이 설정된 경우, 소스 모델의 모든 내용이 허용됩니다.

정규 표현식은 소스 모델의 모든 행에 대해 일치 여부를 확인하므로, 복잡하거나 형식이 잘못된 패턴은 특히 대용량 모델에서 사용될 경우 전체 애플리케이션의 속도를 저하시키거나 멈추게 할 수 있습니다. 애플리케이션 개발자는 정규 표현식을 사용하기 전에 그 성능과 확장성을 측정하는 것이 좋습니다. 정규 표현식이 신뢰할 수 없는 입력에서 비롯된 것이라면, 이 메서드에 전달하기 전에 정제하거나 대신 setFilterFixedString()를 사용하는 것을 고려하십시오.

참고: 이 속성을설정하면 새 정규 표현식의 대소문자 구분 설정이 filterCaseSensitivity 속성으로 전파되어 바인딩이 해제됩니다. 마찬가지로 filterCaseSensitivity 를 명시적으로 설정하면 현재 정규 표현식의 대소문자 구분 설정이 변경되어 바인딩이 해제됩니다.

액세스 함수:

QRegularExpression filterRegularExpression() const
void setFilterRegularExpression(const QString &pattern)
void setFilterRegularExpression(const QRegularExpression &regularExpression)

filterCaseSensitivity, setFilterWildcard() 및 setFilterFixedString()도 참조하십시오 .

[bindable] filterRole : int

참고: 이 속성은 QProperty 바인딩을 지원합니다.

이 속성은 항목을 필터링할 때 소스 모델의 데이터를 쿼리하는 데 사용되는 항목 역할을 저장합니다.

기본값은 Qt::DisplayRole 입니다.

액세스 함수:

int filterRole() const
void setFilterRole(int role)

알림 신호:

void filterRoleChanged(int filterRole)

filterAcceptsRow()도 참조하십시오 .

[bindable] isSortLocaleAware : bool

참고: 이 속성은 QProperty 바인딩을 지원합니다.

이 속성은 정렬 시 문자열을 비교하는 데 사용되는 지역 정보를 고려한 설정을 저장합니다.

기본적으로 정렬은 로컬 환경을 고려하지 않습니다.

액세스 함수:

bool isSortLocaleAware() const
void setSortLocaleAware(bool on)

알림 신호:

void sortLocaleAwareChanged(bool sortLocaleAware)

sortCaseSensitivity 및 lessThan()도 참조하십시오 .

[bindable] recursiveFilteringEnabled : bool

참고: 이 속성은 ‘ QProperty ’ 바인딩을 지원합니다.

이 속성은 필터를 자식 노드에 재귀적으로 적용할지 여부를 지정하며, 일치하는 자식 노드가 있는 경우 해당 자식 노드의 부모 노드도 표시됩니다.

기본값은 false입니다.

액세스 함수:

bool isRecursiveFilteringEnabled() const
void setRecursiveFilteringEnabled(bool recursive)

알림 신호:

void recursiveFilteringEnabledChanged(bool recursiveFilteringEnabled)

autoAcceptChildRows 및 filterAcceptsRow()도 참조하십시오 .

[bindable] sortCaseSensitivity : Qt::CaseSensitivity

참고: 이 속성은 QProperty 바인딩을 지원합니다.

이 속성은 정렬 시 문자열을 비교하는 데 사용되는 대소문자 구분 설정을 저장합니다.

기본적으로 정렬 시 대소문자를 구분합니다.

액세스 함수:

Qt::CaseSensitivity sortCaseSensitivity() const
void setSortCaseSensitivity(Qt::CaseSensitivity cs)

알림 신호:

void sortCaseSensitivityChanged(Qt::CaseSensitivity sortCaseSensitivity)

filterCaseSensitivity 및 lessThan()도 참조하십시오 .

[bindable] sortRole : int

참고: 이 속성은 ‘ QProperty ’ 바인딩을 지원합니다.

이 속성은 항목을 정렬할 때 소스 모델의 데이터를 조회하는 데 사용되는 항목 역할을 저장합니다.

기본값은 Qt::DisplayRole 입니다.

액세스 함수:

int sortRole() const
void setSortRole(int role)

알림 신호:

void sortRoleChanged(int sortRole)

lessThan()도 참조하십시오 .

멤버 함수 설명서

[explicit] QSortFilterProxyModel::QSortFilterProxyModel(QObject *parent = nullptr)

주어진 parent 를 사용하여 정렬 필터 모델을 생성합니다.

[virtual noexcept] QSortFilterProxyModel::~QSortFilterProxyModel()

이 정렬 필터 모델을 삭제합니다.

[signal, since 6.0] void QSortFilterProxyModel::autoAcceptChildRowsChanged(bool autoAcceptChildRows)

이 신호는 autoAcceptChildRows 속성의 값이 변경될 때 발생합니다.

참고: ` autoAcceptChildRows` 속성에 대한알림 신호입니다.

이 함수는 Qt 6.0에서 도입되었습니다.

autoAcceptChildRows도 참조하십시오 .

[protected, since 6.9] void QSortFilterProxyModel::beginFilterChange()

필터 변경을 준비합니다.

사용자 정의 필터링(예: filterAcceptsRow())을 구현 중이며, 필터 매개변수가 변경될 예정인 경우 이 함수를 호출해야 합니다.

void MySortFilterProxyModel::setFilterMaximumDate(QDate date)
{
    beginFilterChange();
    maxDate = date;
    endFilterChange(QSortFilterProxyModel::Direction::Rows);
}

필터가 변경되면, 행 필터의 경우 Direction::Rows 를, 열 필터의 경우 Direction::Columns 를, 행과 열이 모두 필터링되는 경우 Direction::Columns|Direction::Rows 를 사용하여 endFilterChange()를 호출하십시오.

이 함수는 Qt 6.9에서 도입되었습니다.

endFilterChange()도 참조하십시오 .

[override virtual] QModelIndex QSortFilterProxyModel::buddy(const QModelIndex &index) const

QAbstractProxyModel::buddy(const QModelIndex &index) const를 재구현합니다.

[override virtual] bool QSortFilterProxyModel::canFetchMore(const QModelIndex &parent) const

QAbstractProxyModel::canFetchMore(const QModelIndex &parent) const를 재구현합니다.

[override virtual] int QSortFilterProxyModel::columnCount(const QModelIndex &parent = QModelIndex()) const

QAbstractItemModel::columnCount(const QModelIndex &parent) const를 재구현합니다.

[override virtual] QVariant QSortFilterProxyModel::data(const QModelIndex &index, int role = Qt::DisplayRole) const

QAbstractProxyModel::data(const QModelIndex &proxyIndex, int role) const를 재구현합니다.

setData()도 참조하십시오 .

[protected invokable, since 6.12] QSortFilterProxyModel::DataChangeRelevanceFlags QSortFilterProxyModel::dataChangeRelevanceFlags(const QModelIndex &sourceTopLeft, const QModelIndex &sourceBottomRight, const QList<int> &roles) const

소스 모델의 변경 사항이 필터링이나 정렬에 영향을 미치는지 여부를 나타내려면 하위 클래스에서 이 슬롯을 재구현하십시오. 이는 정렬 및 필터링 결과에 영향을 미치지 않는 소스 모델 변경 시 불필요한 ` filterAcceptsRow()` 및 ` lessThan()` 호출을 방지하기 위한 성능 최적화 목적으로 사용됩니다. sourceTopLeft, sourceBottomRight 및 roles 매개변수는 관련성을 평가 중인 변경 사항에 해당하는 소스 모델의 dataChanged() 시그널에서 발송되는 매개변수들입니다.

참고: 바이너리 호환성 제약으로인해 , 이 메서드는 Qt 7이 출시되기 전까지는 가상 메서드로 선언할 수 없습니다. 그동안 하위 클래스에서 이 메서드를 슬롯(slot)이나 Q_INVOKABLE 메서드로 재선언하면, QSortFilterProxyModel 가 이를 동적으로 감지하여 호출합니다.

참고: 기본구현은 모든 변경 사항이 필터링에 관련이 있다고 가정하며, 정렬에는 소스 정렬 열의 변경 사항만 관련이 있다고 가정합니다.

참고: 이 함수는 메타 객체 시스템과 QML을 통해 호출할 수 있습니다. Q_INVOKABLE 를 참조하십시오.

이 함수는 Qt 6.12에서 도입되었습니다.

DataChangeRelevanceFlags, filterAcceptsRow() 및 lessThan()도 참조하십시오 .

[override virtual] bool QSortFilterProxyModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)

QAbstractProxyModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent)를 재구현합니다.

[protected, since 6.10] void QSortFilterProxyModel::endFilterChange(QSortFilterProxyModel::Directions directions = Direction::Both)

필터 매개변수가 변경된 후 현재 필터링 설정을 무효화합니다.

사용자 정의 필터링(예: ` filterAcceptsRow()`)을 구현한 경우, 필터 매개변수가 변경되면 이 함수를 호출해야 합니다. ` directions ` 매개변수는 사용자 정의 필터가 행, 열 또는 둘 모두에 영향을 미치는지 여부를 지정합니다.

필터 매개변수가 변경되기 직전에 beginFilterChange()를 호출하고, 필터 매개변수가 변경된 후 이 함수를 호출해야 합니다. 행 필터의 경우 directions 을 Direction::Rows 로 설정하여 호출하고(즉, filterAcceptsRow()이 구현된 경우), 열 필터의 경우 Direction::Columns 로 설정하여 호출하며(즉, filterAcceptsColumn()이 구현된 경우), 두 필터 함수가 모두 구현된 경우에는 Direction::Both 로 설정하여 호출하십시오.

이 함수는 Qt 6.10에서 도입되었습니다.

[override virtual] void QSortFilterProxyModel::fetchMore(const QModelIndex &parent)

QAbstractProxyModel::fetchMore(const QModelIndex &parent)를 재구현합니다.

[virtual protected] bool QSortFilterProxyModel::filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const

주어진 ` source_column ` 및 ` source_parent `로 지정한 열의 항목이 모델에 포함되어야 하는 경우 ` true `를 반환하고, 그렇지 않은 경우 ` false`를 반환합니다.

참고: 기본구현은 항상 true 을 반환합니다. 설명된 동작을 얻으려면 이 메서드를 재구현해야 합니다.

filterAcceptsRow(), setFilterFixedString(), setFilterRegularExpression() 및 setFilterWildcard()도 참조하십시오 .

[virtual protected] bool QSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const

주어진 source_row 및 source_parent 로 지정한 행의 항목이 모델에 포함되어야 하는 경우 true 를 반환하고, 그렇지 않은 경우 false를 반환합니다.

기본 구현에서는 해당 항목이 보유한 값이 필터 문자열, 와일드카드 문자열 또는 정규 표현식과 일치하는 경우 ` true `를 반환합니다.

참고: 기본적으로 Qt::DisplayRole 가 행을 수락할지 여부를 결정하는 데 사용됩니다. 이는 filterRole 속성을 설정하여 변경할 수 있습니다.

참조: filterAcceptsColumn(), setFilterFixedString(), setFilterRegularExpression(), setFilterWildcard().

[signal] void QSortFilterProxyModel::filterCaseSensitivityChanged(Qt::CaseSensitivity filterCaseSensitivity)

이 신호는 필터의 대소문자 구분 설정이 ‘ filterCaseSensitivity ’로 변경될 때 발생합니다.

참고: 속성 filterCaseSensitivity 에 대한알림 신호입니다.

[signal] void QSortFilterProxyModel::filterRoleChanged(int filterRole)

이 신호는 필터 역할이 ‘ filterRole ’로 변경될 때 발생합니다.

참고: 속성 ` filterRole`에 대한알림 신호입니다.

[override virtual] Qt::ItemFlags QSortFilterProxyModel::flags(const QModelIndex &index) const

QAbstractProxyModel::flags(const QModelIndex &index) const를 재구현합니다.

[override virtual] bool QSortFilterProxyModel::hasChildren(const QModelIndex &parent = QModelIndex()) const

QAbstractProxyModel::hasChildren(const QModelIndex &parent) const를 재구현합니다.

[override virtual] QVariant QSortFilterProxyModel::headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const

QAbstractProxyModel::headerData(int section, Qt::Orientation orientation, int role) const를 재구현합니다.

setHeaderData()도 참조하십시오 .

[override virtual] QModelIndex QSortFilterProxyModel::index(int row, int column, const QModelIndex &parent = QModelIndex()) const

QAbstractItemModel::index(int row, int column, const QModelIndex &parent) const를 재구현합니다.

[override virtual] bool QSortFilterProxyModel::insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())

QAbstractItemModel::insertColumns(int column, int count, const QModelIndex &parent)를 재구현합니다.

[override virtual] bool QSortFilterProxyModel::insertRows(int row, int count, const QModelIndex &parent = QModelIndex())

QAbstractItemModel::insertRows(int row, int count, const QModelIndex &parent)를 재구현합니다.

[slot] void QSortFilterProxyModel::invalidate()

현재 정렬 및 필터링 설정을 초기화합니다.

beginFilterChange() 및 endFilterChange()도 참조하십시오 .

[protected, since 6.0, until 6.13] void QSortFilterProxyModel::invalidateColumnsFilter()

이 함수는 버전 6.13에서 사용 중단될 예정입니다.

대신 ` beginFilterChange()` 및 ` endFilterChange(Direction::Rows)`를 사용하십시오.

열에 대한 현재 필터링을 무효화합니다.

사용자 정의 필터링( filterAcceptsColumn()을 통해)을 구현 중이고 필터 매개변수가 변경된 경우 이 함수를 호출해야 합니다. 이 함수는 invalidateFilter()과 달리 filterAcceptsRow()을 호출하지 않고, filterAcceptsColumn()만 호출한다는 점에서 다릅니다. 행이 변경되지 않는 열을 숨기거나 표시하려면 invalidateFilter() 대신 이 함수를 사용할 수 있습니다.

필터 매개변수가 변경되기 전에 beginFilterChange()를 호출하십시오.

이 함수는 Qt 6.0에서 도입되었습니다.

invalidate(), invalidateRowsFilter() 및 beginFilterChange()도 참조하십시오 .

[protected, until 6.13] void QSortFilterProxyModel::invalidateFilter()

이 함수는 버전 6.13에서 사용 중단될 예정입니다.

대신 ` beginFilterChange()` 및 ` endFilterChange()`을 사용하십시오.

현재 필터링을 무효화합니다.

사용자 정의 필터링(예: filterAcceptsRow())을 구현 중이고 필터 매개변수가 변경된 경우 이 함수를 호출해야 합니다.

필터 매개변수가 변경되기 전에 beginFilterChange()을 호출하십시오.

void MySortFilterProxyModel::setFilterMaximumDate(QDate date)
{
    beginFilterChange();
    maxDate = date;
    endFilterChange(QSortFilterProxyModel::Direction::Rows);
}

invalidate(), invalidateColumnsFilter(), invalidateRowsFilter() 및 beginFilterChange()도 참조하십시오 .

[protected, since 6.0, until 6.13] void QSortFilterProxyModel::invalidateRowsFilter()

이 함수는 버전 6.13에서 사용 중단될 예정입니다.

대신 ` beginFilterChange()` 및 ` endFilterChange`(Direction::Columns)를 사용하십시오.

행에 대한 현재 필터링을 무효화합니다.

사용자 정의 필터링( filterAcceptsRow()을 통해)을 구현 중이고 필터 매개변수가 변경된 경우 이 함수를 호출해야 합니다. 이 함수는 invalidateFilter()과 달리 filterAcceptsColumn()을 호출하지 않고 filterAcceptsRow()만 호출한다는 점에서 다릅니다. 열이 변경되지 않는 행을 숨기거나 표시하려면 invalidateFilter() 대신 이 함수를 사용할 수 있습니다.

필터 매개변수가 변경되기 전에 beginFilterChange()를 호출하십시오.

이 함수는 Qt 6.0에서 도입되었습니다.

invalidate(), invalidateFilter(), invalidateColumnsFilter()도 참조하십시오 .

[virtual protected] bool QSortFilterProxyModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const

주어진 인덱스 source_left 가 가리키는 항목의 값이 주어진 인덱스 source_right 가 가리키는 항목의 값보다 작으면 true 를 반환하고, 그렇지 않으면 false 를 반환합니다.

이 함수는 정렬 시 operator< 로 사용되며, QAbstractItemModel::compareData()을 사용합니다.

기본적으로 QString간의 비교는 대소문자를 구분하지만, sortCaseSensitivity 속성을 사용하여 이를 변경할 수 있습니다.

기본적으로 QModelIndex과 연결된 Qt::DisplayRole 이 비교에 사용됩니다. 이는 sortRole 속성을 설정하여 변경할 수 있습니다.

참고: 전달된인덱스는 소스 모델에 해당합니다.

sortRole, sortCaseSensitivity 및 dynamicSortFilter항목도 참조하십시오 .

[override virtual] QModelIndex QSortFilterProxyModel::mapFromSource(const QModelIndex &sourceIndex) const

QAbstractProxyModel::mapFromSource(const QModelIndex &sourceIndex) const를 재구현합니다.

소스 모델의 ` sourceIndex `를 기반으로 ` QSortFilterProxyModel ` 내의 모델 인덱스를 반환합니다.

mapToSource()도 참조하십시오 .

[override virtual] QItemSelection QSortFilterProxyModel::mapSelectionFromSource(const QItemSelection &sourceSelection) const

QAbstractProxyModel::mapSelectionFromSource(const QItemSelection &sourceSelection) const를 재구현합니다.

[override virtual] QItemSelection QSortFilterProxyModel::mapSelectionToSource(const QItemSelection &proxySelection) const

QAbstractProxyModel::mapSelectionToSource(const QItemSelection &proxySelection) const를 재구현합니다.

[override virtual] QModelIndex QSortFilterProxyModel::mapToSource(const QModelIndex &proxyIndex) const

QAbstractProxyModel::mapToSource(const QModelIndex &proxyIndex) const를 재구현합니다.

정렬 필터 모델에서 주어진 proxyIndex 에 해당하는 소스 모델 인덱스를 반환합니다.

mapFromSource()도 참조하십시오 .

[override virtual] QModelIndexList QSortFilterProxyModel::match(const QModelIndex &start, int role, const QVariant &value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const

QAbstractItemModel::match(const QModelIndex &start, int role, const QVariant &value, int hits, Qt::MatchFlags flags) const를 재구현합니다.

[override virtual] QMimeData *QSortFilterProxyModel::mimeData(const QModelIndexList &indexes) const

QAbstractProxyModel::mimeData(const QModelIndexList &indexes) const를 재구현합니다.

[override virtual] QStringList QSortFilterProxyModel::mimeTypes() const

QAbstractProxyModel::mimeTypes() const를 재구현합니다.

[override virtual] QModelIndex QSortFilterProxyModel::parent(const QModelIndex &child) const

QAbstractItemModel::parent(const QModelIndex &index) const를 재구현합니다.

[signal] void QSortFilterProxyModel::recursiveFilteringEnabledChanged(bool recursiveFilteringEnabled)

이 신호는 재귀 필터 설정이 ‘ recursiveFilteringEnabled ’로 변경될 때 발생합니다.

참고: 속성 ` recursiveFilteringEnabled`에 대한알림 신호입니다.

[override virtual] bool QSortFilterProxyModel::removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())

QAbstractItemModel::removeColumns(int column, int count, const QModelIndex &parent)를 재구현합니다.

[override virtual] bool QSortFilterProxyModel::removeRows(int row, int count, const QModelIndex &parent = QModelIndex())

QAbstractItemModel::removeRows(int row, int count, const QModelIndex &parent)를 재구현합니다.

[override virtual] int QSortFilterProxyModel::rowCount(const QModelIndex &parent = QModelIndex()) const

QAbstractItemModel::rowCount(const QModelIndex &parent) const를 재구현합니다.

[override virtual] bool QSortFilterProxyModel::setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole)

QAbstractProxyModel::setData(const QModelIndex &index, const QVariant &value, int role)를 재구현합니다.

data()도 참조하십시오 .

[slot] void QSortFilterProxyModel::setFilterFixedString(const QString &pattern)

소스 모델의 내용을 필터링하는 데 사용되는 고정 문자열을 지정된 ` pattern`로 설정합니다.

이 메서드는 정규식 옵션을 재설정하지만 대소문자 구분을 유지합니다.

참고: 이 메서드를호출하면 정규 표현식이 업데이트되어 filterRegularExpression 에 대한 바인딩이 해제됩니다. 그러나 filterCaseSensitivity 바인딩에는 영향을 미치지 않습니다.

setFilterCaseSensitivity(), setFilterRegularExpression(), setFilterWildcard(), filterRegularExpression()도 참조하십시오 .

[slot] void QSortFilterProxyModel::setFilterRegularExpression(const QString &pattern)

소스 모델의 내용을 필터링하는 데 사용되는 정규 표현식을 pattern 로 설정합니다.

이 메서드는 내부적으로 ` QRegularExpression `를 사용하므로, 새로운 코드를 작성할 때는 이 메서드를 우선적으로 사용해야 합니다.

이 메서드는 정규식 옵션을 재설정하지만 대소문자 구분을 유지합니다.

참고: 이 메서드를호출하면 정규 표현식이 업데이트되어 filterRegularExpression 에 대한 바인딩이 해제됩니다. 그러나 filterCaseSensitivity 바인딩에는 영향을 미치지 않습니다.

참고: filterRegularExpression 속성에 대한세터 함수입니다.

참고: 이 슬롯은 오버로드되어 있습니다. 이 슬롯에 연결하려면:

// Connect using qOverload:
connect(sender, &SenderClass::signal,
        sortFilterProxyModel, qOverload(&QSortFilterProxyModel::setFilterRegularExpression));

// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
        sortFilterProxyModel, [receiver = sortFilterProxyModel](const QString &pattern) { receiver->setFilterRegularExpression(pattern); });
더 많은 예제와 접근 방식은 오버로드된 슬롯에 연결하기를 참조하십시오.

setFilterCaseSensitivity(), setFilterWildcard(), setFilterFixedString(), filterRegularExpression()도 참조하십시오 .

[slot] void QSortFilterProxyModel::setFilterWildcard(const QString &pattern)

소스 모델의 내용을 필터링하는 데 사용되는 와일드카드 표현식을 지정된 pattern 로 설정합니다.

이 메서드는 정규식 옵션을 초기화하지만 대소문자 구분을 유지합니다.

참고: 이 메서드를호출하면 정규 표현식이 업데이트되어 filterRegularExpression 에 대한 바인딩이 해제됩니다. 그러나 filterCaseSensitivity 바인딩에는 영향을 미치지 않습니다.

setFilterCaseSensitivity(), setFilterRegularExpression(), setFilterFixedString() 및 filterRegularExpression()도 참조하십시오 .

[override virtual] bool QSortFilterProxyModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole)

QAbstractProxyModel::setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role)를 재구현합니다.

headerData()도 참조하십시오 .

[override virtual] void QSortFilterProxyModel::setSourceModel(QAbstractItemModel *sourceModel)

QAbstractProxyModel::setSourceModel(QAbstractItemModel *sourceModel)을 재구현합니다.

[override virtual] QModelIndex QSortFilterProxyModel::sibling(int row, int column, const QModelIndex &idx) const

QAbstractProxyModel::sibling(int row, int column, const QModelIndex &idx) const를 재구현합니다.

[override virtual] void QSortFilterProxyModel::sort(int column, Qt::SortOrder order = Qt::AscendingOrder)

QAbstractProxyModel::sort(int column, Qt::SortOrder order)를 재구현합니다.

주어진 order 내에서 column 에 따라 모델을 정렬합니다. 정렬 column 이 0보다 작을 경우, 모델은 주어진 order 내에서 소스 모델 행 순서에 따라 정렬됩니다.

sortColumn()도 참조하십시오 .

[signal] void QSortFilterProxyModel::sortCaseSensitivityChanged(Qt::CaseSensitivity sortCaseSensitivity)

정렬 시 대소문자 구분이 ‘ sortCaseSensitivity ’로 변경되면 이 신호가 발생합니다.

참고: 속성 ` sortCaseSensitivity`에 대한알림 신호입니다.

int QSortFilterProxyModel::sortColumn() const

현재 정렬에 사용 중인 열을 반환합니다

이 메서드는 가장 최근에 사용된 정렬 열을 반환합니다. 기본값은 -1이며, 이는 이 프록시 모델이 정렬을 수행하지 않음을 의미합니다.

sort()도 참조하십시오 .

[signal] void QSortFilterProxyModel::sortLocaleAwareChanged(bool sortLocaleAware)

이 신호는 로케일 인식 설정이 ‘ sortLocaleAware ’로 변경될 때 발생합니다.

참고: 속성 ` isSortLocaleAware`에 대한알림 신호입니다.

Qt::SortOrder QSortFilterProxyModel::sortOrder() const

현재 정렬에 사용 중인 순서를 반환합니다.

이 함수는 가장 최근에 사용된 정렬 순서를 반환합니다. 기본값은 ` Qt::AscendingOrder`입니다.

sort()도 참조하십시오 .

[signal] void QSortFilterProxyModel::sortRoleChanged(int sortRole)

이 신호는 정렬 역할이 ‘ sortRole ’로 변경될 때 발생합니다.

참고: 속성 ` sortRole`에 대한알림 신호입니다.

[override virtual] QSize QSortFilterProxyModel::span(const QModelIndex &index) const

QAbstractProxyModel::span(const QModelIndex &index) const를 재구현합니다.

[override virtual] Qt::DropActions QSortFilterProxyModel::supportedDropActions() const

QAbstractProxyModel::supportedDropActions() const를 재구현합니다.

© 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.