QTreeview查找功能的需求:
1.搜索某个节点时,该节点的父节点和子节点都显示出来
效果图如下:
输入搜索内容后:
核心代码如下:
bool TableViewSortFilterModelBase::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{
// if(!sourceParent.isValid())
// {
// return false;
// }
QAbstractItemModel *pModel = sourceModel();
if(NULL == pModel) return false;
//--------------如果本节点的父节点可见,那么本节点也要可见
{
QModelIndex source_index = sourceParent;
while (source_index.isValid())
{
bool isContains = pModel->data(source_index).toString().contains(filterRegExp());
if(isContains) return true;
source_index = sourceModel()->parent(source_index);
}
}
//--------------判断本身是否可见
QModelIndex index;
bool isContains = false;
int columnCount = pModel->columnCount();
for(int i=0;i<columnCount;i++)
{
index = pModel->index(sourceRow, i, sourceParent);
if (index.column() != m_filterColumn && -1 != m_filterColumn) continue; //根据所选过滤类型选择需要进行过滤的列
isContains = pModel->data(index).toString().contains(filterRegExp());
if(isContains) return true;
}
//--------------如果本节点的子节点可见,那么本节点也要可见
{
// check all decendant's
QModelIndex source_index = sourceModel()->index(sourceRow, 0, sourceParent);
if(!source_index.isValid())
{
return false;
}
for (int k=0; k<sourceModel()->rowCount(source_index); k++)
{
if (filterAcceptsRow(k, source_index))
{
return true;
}
}
}
return false;
}
源码下载地址:https://download.csdn.net/download/liuguangzhou123/11206060