QSortFilterProxyModel Class

QSortFilterProxyModel 类支持排序和过滤在另一个模型和视图之间传递的数据。更多

Header: #include <QSortFilterProxyModel>
CMake.QSortFilterProxyModel 类 find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
继承: QAbstractProxyModel

属性

公共函数

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()
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) void invalidateColumnsFilter()
void invalidateFilter()
(since 6.0) 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 充当了原始模型的包装器。如果需要将源QModelIndexes 转换为已排序/过滤的模型索引,或反之亦然,请使用mapToSource()、mapFromSource()、mapSelectionToSource() 和mapSelectionFromSource() 。

注: 默认情况下,只要原始模型发生变化,模型就会动态地重新排序和过滤数据。可以通过设置dynamicSortFilter 属性来更改此行为。

基本排序/过滤模型自定义排序/过滤模型示例说明了如何使用 QSortFilterProxyModel 执行基本排序和过滤,以及如何子类化该模型以实现自定义行为。

排序

QTableView 和 有一个 属性,用于控制用户是否可以通过单击视图的水平标题对视图进行排序。例如QTreeView sortingEnabled

        treeView->setSortingEnabled(true);

当该功能开启时(默认为关闭),点击标题部分可根据该列对项目进行排序。通过反复点击,用户可以交替使用升序和降序。

排序的 QTreeView

在幕后,视图会调用模型上的sort() 虚拟函数对模型中的数据重新排序。要使数据可排序,您可以在模型中实现sort() 或使用 QSortFilterProxyModel 来封装您的模型--QSortFilterProxyModel 提供了一个通用的sort() 重实现,可对项目的sortRole() (Qt::DisplayRole 默认为 ) 进行操作,并能理解多种数据类型,包括intQStringQDateTime 。对于分层模型,排序会递归应用到所有子项。默认情况下,字符串比较区分大小写;可通过设置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();
    } else {
        static const QRegularExpression emailPattern("[\\w\\.]*@[\\w\\.]*");

        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 中指定过滤正则表达式、通配符模式或固定字符串,并将textChanged() 信号连接到setFilterRegularExpression() 、setFilterWildcard() 或setFilterFixedString() 以重新应用过滤。

自定义过滤行为可通过重新实现filterAcceptsRow() 和filterAcceptsColumn() 函数来实现。例如(来自自定义排序/过滤模型示例),以下实现忽略了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());
}

(此代码段来自自定义排序/过滤模型示例)。

如果您要处理大量过滤,并且需要重复调用invalidateFilter() ,那么使用beginResetModel() /endResetModel() 可能会更有效,这取决于您的模型的实现。但是,beginResetModel() /endResetModel() 会将代理模型返回到其原始状态,丢失选择信息,并且会导致代理模型被重新填充。

子类

由于QAbstractProxyModel 及其子类是从QAbstractItemModel 派生的,因此关于子类化普通模型的许多建议也适用于代理模型。此外,值得注意的是,该类中许多函数的默认实现是这样编写的:它们调用相关源模型中的等价函数。对于具有更复杂行为的源模型,可能需要重载这种简单的代理机制;例如,如果源模型提供了自定义的hasChildren() 实现,则也应在代理模型中提供。

注: 模型子类化参考》(Model Subclassing Reference)中提供了一些子类化模型的一般指南。

另请参阅 QAbstractProxyModelQAbstractItemModel模型/视图编程基本排序/过滤模型示例自定义排序/过滤模型示例QIdentityProxyModel

属性文档

[bindable, since 6.0] autoAcceptChildRows : bool

注意: 此属性支持QProperty 绑定。

如果为 true,代理模型将不会过滤掉已接受行的子行,即使子行本身会被过滤掉。

默认值为 false。

此属性在 Qt 6.0 中引入。

另请参阅 recursiveFilteringEnabledfilterAcceptsRow()。

[bindable] dynamicSortFilter : bool

注意: 该属性支持QProperty 绑定。

当源模型的内容发生变化时,该属性将决定代理模型是否进行动态排序和过滤。

请注意,当 dynamicSortFilter 为 true 时,不应通过代理模型更新源模型。例如,如果您在QComboBox 上设置代理模型,那么使用更新模型的函数(如addItem() )将无法正常工作。另一种方法是将 dynamicSortFilter 设置为 false,并在向QComboBox 添加项目后调用sort() 。

默认值为 true。

另请参阅 sortColumn()。

[bindable] filterCaseSensitivity : Qt::CaseSensitivity

注意: 该属性支持QProperty 绑定。

该属性保存用于过滤源模型内容的QRegularExpression 模式的大小写敏感性。

默认情况下,过滤器区分大小写。

注意: 设置该属性会将新的大小写敏感度传播到filterRegularExpression 属性,因此会破坏其绑定。同样,显式设置filterRegularExpression 会改变当前的大小写敏感度,从而破坏其绑定。

另请参阅 filterRegularExpressionsortCaseSensitivity

[bindable] filterKeyColumn : int

注意: 该属性支持QProperty 绑定。

该属性用于保存从哪一列读取用于过滤源模型内容的键。

默认值为 0,如果值为-1,则将从所有列读取键值。

[bindable] filterRegularExpression : QRegularExpression

注意: 该属性支持QProperty 绑定。

该属性保存用于过滤源模型内容的QRegularExpression

通过QRegularExpression 重载设置此属性会覆盖当前的filterCaseSensitivity 。默认情况下,QRegularExpression 是匹配所有内容的空字符串。

如果未设置QRegularExpression 或为空字符串,则将接受源模型中的所有内容。

注意: 设置该属性会将新正则表达式的大小写敏感性传播到filterCaseSensitivity 属性,因此会破坏其绑定。同样,显式设置filterCaseSensitivity 会改变当前正则表达式的大小写敏感性,从而破坏其绑定。

另请参阅 filterCaseSensitivitysetFilterWildcard() 和setFilterFixedString()。

[bindable] filterRole : int

注意: 该属性支持QProperty 绑定。

该属性包含用于在筛选项目时查询源模型数据的项目角色。

默认值为Qt::DisplayRole

另请参阅 filterAcceptsRow() 。

[bindable] isSortLocaleAware : bool

注意: 该属性支持QProperty 绑定。

该属性保存排序时用于比较字符串的本地感知设置。

默认情况下,排序不是本地感知的。

另请参阅 sortCaseSensitivitylessThan()。

[bindable] recursiveFilteringEnabled : bool

注意: 该属性支持QProperty 绑定。

该属性表示是否对子节点递归应用筛选器,对于任何匹配的子节点,其父节点也将可见。

默认值为 false。

另请参阅 autoAcceptChildRowsfilterAcceptsRow()。

[bindable] sortCaseSensitivity : Qt::CaseSensitivity

注: 该属性支持QProperty 绑定。

该属性保存排序时用于比较字符串的大小写敏感性设置

默认情况下,排序对大小写敏感。

另请参阅 filterCaseSensitivitylessThan()。

[bindable] sortRole : int

注意: 该属性支持QProperty 绑定。

该属性包含项目角色,用于在排序项目时查询源模型的数据。

默认值为Qt::DisplayRole

另请参阅 lessThan() 。

成员函数文档

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

用给定的parent 构建排序筛选器模型。

[virtual noexcept] QSortFilterProxyModel::~QSortFilterProxyModel()

销毁该分类筛选器模型。

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

autoAcceptChildRows 属性的值发生变化时会发出该信号。

注: 用于autoAcceptChildRows 属性的 Notifier 信号。

此函数在 Qt 6.0 中引入。

另请参阅 autoAcceptChildRows

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

准备更改过滤器。

如果您正在执行自定义过滤(例如filterAcceptsRow() ),且过滤参数即将更改,则应调用此函数。

void MySortFilterProxyModel::setFilterMaximumDate(QDate date)
{
    beginFilterChange();
    maxDate = date;
    invalidateRowsFilter();
}

此函数在 Qt 6.9 中引入。

另请参阅 invalidateFilter()、invalidateColumnsFilter() 和invalidateRowsFilter()。

[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().

[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).

[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_columnsource_parent 所指示列中的项目应包含在模型中,则返回true ;否则返回false

注: 默认实现总是返回true 。您必须重新实现此方法才能获得所描述的行为。

另请参阅 filterAcceptsRow()、setFilterFixedString()、setFilterRegularExpression() 和setFilterWildcard() 。

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

如果给定的source_rowsource_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()

使当前排序和筛选无效。

另请参见 invalidateFilter()。

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

使列的当前过滤无效。

如果正在执行自定义过滤(通过filterAcceptsColumn()) 而过滤参数已更改,则应调用此函数。该函数与invalidateFilter() 不同,它不会调用filterAcceptsRow(),而只会调用filterAcceptsColumn()。如果您想隐藏或显示行数不变的列,可以用它代替invalidateFilter()。

在过滤器参数发生变化之前,请调用beginFilterChange()。

此函数在 Qt 6.0 中引入。

另请参阅 invalidate()、invalidateRowsFilter() 和beginFilterChange()。

[protected] void QSortFilterProxyModel::invalidateFilter()

使当前过滤无效。

如果正在执行自定义过滤(如filterAcceptsRow()) 且过滤参数已更改,则应调用此函数。

在过滤参数发生变化之前,请调用beginFilterChange()。

void MySortFilterProxyModel::setFilterMaximumDate(QDate date)
{
    beginFilterChange();
    maxDate = date;
    invalidateRowsFilter();
}

另请参阅 invalidate()、invalidateColumnsFilter()、invalidateRowsFilter() 和beginFilterChange()。

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

使当前的行过滤无效。

如果正在执行自定义过滤(通过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

该函数在排序时用作 < 操作符,可处理以下QVariant 类型:

任何其他类型都将使用QVariant::toString() 转换为QString

QStrings 的比较默认区分大小写;可使用sortCaseSensitivity 属性进行更改。

默认情况下,与QModelIndexes 关联的Qt::DisplayRole 用于比较。可通过设置sortRole 属性进行更改。

注意: 传入的索引与源模型相对应。

另请参阅 sortRole,sortCaseSensitivity, 和dynamicSortFilter

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

重实现:QAbstractProxyModel::mapFromSource(const QModelIndex &sourceIndex) 常量。

根据源模型中的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) 常量。

返回与排序筛选模型中给定的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 的设置函数。

另请参阅 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 小于零,模型将按给定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.

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