void Search(QTreeWidget *treeWidget, const QString &key, int level)
{
//找到所有匹配的节点
QList<QTreeWidgetItem *> items = treeWidget->findItems(key, Qt::MatchContains | Qt::MatchRecursive);
//将匹配到的节点加入队列/该节点的父节点也相当于匹配/不然父节点隐藏子节点也会跟着隐藏
QList<QTreeWidgetItem *> itemAll;
foreach (QTreeWidgetItem *item, items) {
//当前节点的所有父节点也添加进去/几次循环相当于几个层级
for (int i = 0; i < level; ++i) {
//去重添加
if (!itemAll.contains(item)) {
itemAll << item;
}
//为空表示没有父节点则跳出循环
item = item->parent();
if (!item) {
break;
}
}
}
//遍历所有节点/匹配的节点显示否则隐藏
QTreeWidgetItemIterator it(treeWidget);
while (*it) {
(*it)->setHidden(!itemAll.contains(*it));
++it;
}
}
Search(ui->treeWidget, "测试", 5);