根据关键词过滤 QTreeWidget 中 Item

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);
posted @ 2025-04-17 18:01  上车去广西  阅读(111)  评论(0)    收藏  举报