【Qt中文手册】QSortFilterProxyModel

1、说明

QSortFilterProxyModel类继承自QAbstractProxyModel是一个代理类,存在于另一模型Model和视图View之间,将另一个模型排序或者过滤后在视图上显示。

2、简单示例

没有使用代理的项视图模型代码如下

QTreeView *treeView = new QTreeView;
MyItemModel *model = new MyItemModel(this);
treeView->setModel(model);

使用代理的项视图模型代码如下:

QTreeView *treeView = new QTreeView;
MyItemModel *sourceModel = new MyItemModel(this);
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this);
proxyModel->setSourceModel(sourceModel);
treeView->setModel(proxyModel);

上面的示例中,只是加入了代理,但并没有启动过滤和排序,原始数据显示在视图中。

3、属性
dynamicSortFilter : bool

该属性表示:代理模型是否在源模型的内容更改时动态排序和筛选,默认是true;
操作函数:

bool	dynamicSortFilter() const
void	setDynamicSortFilter(bool enable)
filterCaseSensitivity : Qt::CaseSensitivity

该属性表示:过滤器是否区分大小写,默认是区分大小写;
操作函数:

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

该属性表示:从哪列获取值来作为过滤的关键值,默认是0(第一列);如果设为-1表示从所有列中取关键值。
操作函数:

int	filterKeyColumn() const
void	setFilterKeyColumn(int column)
filterRegExp : QRegExp

该属性表示:过滤的时用到的正则表达式QRegExp,默认是空,匹配所有;
操作函数:

QRegExp	filterRegExp() const
void	setFilterRegExp(const QString &pattern)
void	setFilterRegExp(const QRegExp &regExp)
filterRegularExpression : QRegularExpression

同上,在Qt 5.12中引入,QRegularExpression兼容Prel,在使用正则表达式时,推荐使用QRegularExpression来代替QRegExp;
操作函数;

QRegularExpression	filterRegularExpression() const
void	setFilterRegularExpression(const QString &pattern)
void	setFilterRegularExpression(const QRegularExpression &regularExpression)
filterRole : int

该属性表示:过滤时取该项的哪个角色的值,默认值为Qt :: DisplayRole;
操作函数:

int	filterRole() const
void	setFilterRole(int role)
isSortLocaleAware : bool

该属性表示:在对字符串排序时,是否考虑本地因素,默认是不考虑;
操作函数:

bool	isSortLocaleAware() const
void	setSortLocaleAware(bool on)
recursiveFilteringEnabled : bool

该属性表示:过滤时,是否以递归方式匹配子项,如果子项可见,其父项也将可见;默认是false,在Qt 5.10引入
操作函数:

bool	isRecursiveFilteringEnabled() const
void	setRecursiveFilteringEnabled(bool recursive)
sortCaseSensitivity : Qt::CaseSensitivity

该属性表示:在排序时,是否区分大小写,默认是区分大小写
操作函数:

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

该属性表示:排序时取该项的哪个角色的值,默认值为Qt :: DisplayRole;
操作函数:

int	sortRole() const
void	setSortRole(int role)
4、公共函数
QSortFilterProxyModel(QObject *parent = nullptr)

构造函数;

virtual ~QSortFilterProxyModel()

析构函数;

bool dynamicSortFilter() const

设置当源数据发生更改时,是否自动排序和过滤;
注意:当dynamicSortFilter为true时,不应通过代理模型更新源模型。例如,如果在QComboBox上设置代理模型,则使用更新模型的函数(例如addItem())将无法按预期工作。另一种方法是将dynamicSortFilter设置为false,并在将项添加到QComboBox后调用sort()。
参见属性:dynamicSortFilter;

Qt::CaseSensitivity filterCaseSensitivity() const

过滤时,是否区分大小写,参见属性:dynamicSortFilter;

int filterKeyColumn() const

返回从哪列获取值来作为过滤的关键值,;如果返回-1表示从所有列中取关键值;
参见属性:filterKeyColumn;

QRegExp filterRegExp() const

参见属性:filterRegExp;

QRegularExpression filterRegularExpression() const

参见属性:filterRegularExpression;

int filterRole() const

参见属性:filterRole;

bool isRecursiveFilteringEnabled() const

参见属性:isRecursiveFilteringEnabled;

bool isSortLocaleAware() const

参见属性:isSortLocaleAware;

void setDynamicSortFilter(bool enable)

参见属性:dynamicSortFilter;

void setFilterCaseSensitivity(Qt::CaseSensitivity cs)

参见属性:dynamicSortFilter;

void setFilterKeyColumn(int column)

参见属性:filterKeyColumn;

void setFilterRole(int role)

参见属性:filterRole;

void setRecursiveFilteringEnabled(bool recursive)

参见属性:recursiveFilteringEnabled ;

void setSortCaseSensitivity(Qt::CaseSensitivity cs)

参见属性:sortCaseSensitivity ;

void setSortLocaleAware(bool on)

参见属性:isSortLocaleAware ;

void setSortRole(int role)

参见属性:sortRole;

Qt::CaseSensitivity sortCaseSensitivity() const

参见属性:sortCaseSensitivity ;

int sortColumn() const

返回最近使用哪列排序的;

Qt::SortOrder sortOrder() const

返回最近使用的排列顺序;

int sortRole() const

参见属性:sortRole;

5、虚函数
virtual QModelIndex buddy(const QModelIndex &index) const override

返回由index表示的项的伙伴的模型索引。当用户想要编辑项目时,视图将调用此函数来检查是否应该编辑模型中的另一个项目。然后,视图将使用buddy项返回的模型索引构造委托。
此函数的默认实现将每个项目作为其自己的伙伴。

virtual bool canFetchMore(const QModelIndex &parent) const override

如果子项中有可用于父项parent的数据,则返回true,默认是始终返回false;
如果返回true,可以使用fetchMore来获取

virtual int columnCount(const QModelIndex &parent = QModelIndex()) const override

返回父项的列数;

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

返回给定引索index、给定角色role的数据;

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

用于项视图的拖放;当给定Mime数据,可以在给定父对象parent的行row、列column中执行action成功了,返回true,否则返回false;

virtual void fetchMore(const QModelIndex &parent) override

使用parent引指定的父项获取项目的所有可用数据。

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

根据引索index返回,项的标记,如可以编辑Qt::ItemIsEditable、可以选中Qt::ItemIsSelectable等

virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const override

如果parent有子项则返回true,否则返回false;

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

返回指定方向orientation的标题中给定角色role和节section的数据。
对于水平标题,节号对应于列号。类似地,对于垂直标题,节号对应于行号。

virtual QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override

返回给定parent父引索中指定行、列的项的引索;

virtual bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override

在给定父项的第column列前插入一列,成功返回true;

virtual bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override

在给定父项的第row行前插入一行,成功返回true;

virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const override

返回源模型中sourceIndex对应的代理模型的引索;

virtual QItemSelection mapSelectionFromSource(const QItemSelection &sourceSelection) const override

返回源模型中sourceSelection对应代理模型中的选择项;

virtual QItemSelection mapSelectionToSource(const QItemSelection &proxySelection) const override

返回代理模型中proxySelection对应的源模型中的选择项;

virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const override

返回代理模型中proxyIndex对应的源模型的项;

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

返回从start项开始,和数据value匹配的,最多hits个项列表;

virtual QMimeData * mimeData(const QModelIndexList &indexes) const override

返回一个对象,该对象包含与指定索引列表indexes对应的序列化数据项;

virtual QStringList mimeTypes() const override

返回允许的MIME类型列表。默认情况下,内置模型和视图使用内部MIME类型:application/x-qabstractitemmodeldatalist。

virtual QModelIndex parent(const QModelIndex &child) const override

返回具有给定索引的模型项的父级。如果项目没有父项,则返回无效的QModelIndex。

virtual bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override

删除parent项中第column列以下count个列;

virtual bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override

删除parent项中第row行以下count个行;

virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override

返回指定parent项的行数;

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

设置给定项引索index项中角色role的数据值为value;

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

设置指定方向orientation的指定字段section中角色role的数据值为value;

virtual void setSourceModel(QAbstractItemModel *sourceModel) override

设置代理模型的源模型;

virtual QModelIndex sibling(int row, int column, const QModelIndex &idx) const override

返回index处项目的行和列的兄弟节点,如果该位置没有兄弟节点,则返回无效的QModelIndex。

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

按给定顺序order对column列进行排序。

virtual QSize span(const QModelIndex &index) const override

返回index表示的项的行和列跨度。

virtual Qt::DropActions supportedDropActions() const override

返回该模型支持的拖拽的动作。

6、槽函数
void invalidate()

使当前排序和筛选无效。

void setFilterFixedString(const QString &pattern)

将用于过滤源模型内容的固定字符串设置为给定模式。

void setFilterRegExp(const QRegExp &regExp)

将用于过滤源模型内容的正则表达式设置为regExp

void setFilterRegExp(const QString &pattern)

将用于过滤源模型内容的正则表达式设置为pattern

void setFilterRegularExpression(const QString &pattern)

将用于过滤源模型内容的正则表达式设置为pattern

void setFilterRegularExpression(const QRegularExpression &regularExpression)

将用于过滤源模型内容的正则表达式设置为regularExpression

void setFilterWildcard(const QString &pattern)

将用于筛选源模型内容的通配符表达式设置为给定模式。

7、静态函数
const QMetaObject staticMetaObject
8、保护函数
virtual bool filterAcceptsColumn(int source_column, const QModelIndex &source_parent) const

如果指定的source_column和source_parent所指示的列中的项应该包含在模型中,则返回true;否则返回false。
如果相关项所持有的值与过滤器字符串、通配符字符串或正则表达式匹配,则默认实现返回true。

virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const

如果给定的source_row和source_parent所指示的行中的项应该包含在模型中,则返回true;否则返回false。
如果相关项所持有的值与过滤器字符串、通配符字符串或正则表达式匹配,则默认实现返回true。

void invalidateFilter()

使当前筛选无效。
如果您正在实现自定义筛选(例如filterAcceptsRow()),并且您的筛选器参数已经更改,则应该调用此函数。
这个函数是在Qt 4.3中引入的。

virtual bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const

如果给定索引source_left引用的项的值小于给定索引source_right引用的项的值,则返回true,否则返回false。

猜你喜欢

转载自blog.csdn.net/u010168781/article/details/88669795