QSortFilterProxyModel
2015-03-31 23:13
555 查看
QSortFilterProxyModel
使用法发如下:QTreeView *treeView = new QTreeView; MyItemModel *sourceModel = new MyItemModel(this); QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this); proxyModel->setSourceModel(sourceModel); treeView->setModel(proxyModel);
在槽函数中设置过滤的正则表达式方法,然后选择过滤的列。
proxyModel->setFilterRegExp(QRegExp(".png", Qt::CaseInsensitive, QRegExp::FixedString)); proxyModel->setFilterKeyColumn(1);
当然也可以使用固定的字符串过滤。
proxyModel->setFilterFixedString(const QString & pattern)
点击表头排序view要将以下方法设置为true
treeView->setSortingEnabled(true);
要自定义排序方式,继承QSortFilterProxyModel,实现函数
bool lessThan(const QModelIndex &left, const QModelIndex &right) const
要实现多列过滤,继承QSortFilterProxyModel,实现函数
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const**
以下两个方法是qt自带例子
customsortfiltermodel中的实现方式。
bool MySortFilterProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const { QVariant leftData = sourceModel()->data(left); QVariant rightData = sourceModel()->data(right); if (leftData.type() == QVariant::DateTime) { return leftData.toDateTime() < rightData.toDateTime(); } else { QRegExp *emailPattern = new QRegExp("([\\w\\.]*@[\\w\\.]*)"); QString leftString = leftData.toString(); if(left.column() == 1 && emailPattern->indexIn(leftString) != -1) leftString = emailPattern->cap(1); QString rightString = rightData.toString(); if(right.column() == 1 && emailPattern->indexIn(rightString) != -1) rightString = emailPattern->cap(1); return QString::localeAwareCompare(leftString, rightString) < 0; } }
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(filterRegExp()) || sourceModel()->data(index1).toString().contains(filterRegExp())) && dateInRange(sourceModel()->data(index2).toDate()); }
相关文章推荐
- qt 代理模型 proxy model QSortFilterProxyModel
- QTableView区分鼠标点击事件的左键和右键以及QSortFilterProxyModel重新排序的问题
- QSortFilterProxyModel Class
- QT的排序与过滤(QSortFilterProxyModel)
- Qt学习之路(44): QSortFilterProxyModel
- QtCreator 代理模型(QSortFilterProxyModel),数据窗口映射器(QDataWidgetMapper)
- QDirModel使用QSortFilterProxyModel过滤指定磁盘和非系统盘
- Qt学习之路(44): QSortFilterProxyModel
- Qt QSortFilterProxyModel示例代码, 使用方法
- QSortFilterProxyModel简介及小例
- QSortFilterProxyModel--44
- Qt之QHeaderView自定义排序(QSortFilterProxyModel)
- Qt QSortFilterProxyModel示例代码, 使用方法
- Qt之QHeaderView自定义排序(QSortFilterProxyModel)
- Qt学习记录,QSortFilterProxyModel
- QSortFilterProxyModel的简单用法
- 基于QSortFilterProxyModel实现表格数据查询排序框架
- QSortFilterProxyModel
- How to use Qt’s QSortFilterProxyModel
- Qt中QSortFilterProxyModel关于多列排序的实现