如何在Qt(C++)中搜索(过滤的)QSortFilterProxyModel
How to search through a (filtered) QSortFilterProxyModel in Qt (C++)?
我有一个有效的过滤器函数(filterAcceptsRow
),它根据第一列(index0)过滤分层QTreeView
。我需要连接一个搜索QLineEdit
,以便让用户通过(过滤的)QTreeView
进行搜索。我不确定如何向此功能添加搜索算法。谁能帮我弄清楚?搜索算法应在所有 5 列 (index0-index4) 中搜索QString
。
我的过滤功能:
bool ProxyModel::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);
QModelIndex index3 = sourceModel()->index(sourceRow, 3, sourceParent);
QModelIndex index4 = sourceModel()->index(sourceRow, 4, sourceParent);
if (m_filterEnabled)
{
foreach (const QString &row, rows)
{
if (sourceModel()->data(index0).toString().contains(row) && m_shownRow)
return true; //element should be shown
else if (sourceModel()->data(index0).toString().contains(row) && !m_shownRow)
return false; //element should NOT be shown
}
if (m_shownRow)
return false;
else
return true;
} else {
return true; //no filter -> show everything
}
}
最好的方法是链接 2 个代理模型。
我为表格做了类似的东西,但相信对于树它会以同样的方式工作。
创建从QSortFilterProxyModel
派生的类并实现filterAcceptsRow
(此处示例使用正则表达式):
bool QubyxSearchFilterProxyModel::filterAcceptsRow(int sourceRow,const QModelIndex &sourceParent) const
{
for(int i = 0; i < sourceModel()->columnCount(); i ++)
{
QModelIndex index = sourceModel()->index(sourceRow, i, sourceParent);
if(sourceModel()->data(index).toString().toLower().trimmed().contains(filterRegExp()))
return true;
}
return false;
}
您可以在处理搜索行编辑更改的插槽之一中设置正则表达式:
QRegExp regExp(widget->lineEditSearch->text().toLower(),Qt::CaseSensitive,QRegExp::FixedString);
searchProxyModel_->setFilterRegExp(regExp);
在树代码中:
searchProxyModel_->setSourceModel(model);
proxyModel_->setSourceModel(searchProxyModel_);
相关文章:
- 有根的二进制搜索树.保留与其父级的链接
- 在C++中搜索嵌套多映射值
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 二进制搜索树叶数问题
- 为什么二进制搜索在我的测试中不起作用
- 正在尝试重载二进制搜索树分配运算符
- c++binary_search函数排序数组(流行名称搜索)出现问题
- 向量上的线性搜索
- 如何在动态数组上使用搜索函数
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- cmake:添加要搜索头文件的目录
- 使用C++创建特殊的二叉搜索树
- 在C++的字符串中搜索和删除某些字符
- std::unordered_map 搜索算法是如何实现的?
- 使用不变量来确定二分搜索中的边界条件
- 二叉搜索如何比线性搜索更快?
- 按扩展名过滤搜索文件会返回太多结果
- 你能搜索或过滤 Vim 完成吗?
- 如何在Qt(C++)中搜索(过滤的)QSortFilterProxyModel
- 过滤字符串过长会影响ldap的搜索性能吗?