qt treewidget 点击节点,当前节点自动展开,当前节点下子节点自动折叠,同级节点自动折叠

qt treewidget 点击节点,当前节点自动展开,当前节点下子节点自动折叠,同级节点自动折叠

        connect(ui->data_pdo_tree,&QTreeWidget::itemClicked,this,[=](QTreeWidgetItem *item, int column) mutable{
            // 有 parent 则不是最高节点
            //myDebug;
            //QTreeWidgetItem *item_ui_top=toolGetTopLevelItem(item_ui);//QVariant data = item_ui_top->data(column, Qt::UserRole);
            //qintptr retrievedPtrValue = item_ui_top->data(column, Qt::UserRole).toLongLong(); // 注意:这里使用 toLongLong() 是因为 QVariant 没有直接转换为 qintptr 的方法
            //cJSON *item_top_parent = reinterpret_cast<cJSON *>(retrievedPtrValue);
            //QString item_top_name=QString(item_top_parent->string);

            QTreeWidget *treeWidget = qobject_cast<QTreeWidget *>(item->treeWidget());
            if (!treeWidget) return;

            //判断点击的是否是 top top直接处理
            // 遍历所有顶级节点
            int flag_top=0;
            for (int i = 0; i < treeWidget->topLevelItemCount(); ++i) {
                QTreeWidgetItem *topItem = treeWidget->topLevelItem(i);
                if (topItem == item) {
                    flag_top=1;
                    break;
                }
            }
            if(flag_top){
                for (int i = 0; i < treeWidget->topLevelItemCount(); ++i) {
                    QTreeWidgetItem *topItem = treeWidget->topLevelItem(i);
                    if (topItem == item) {
                        // 展开当前顶级节点的所有子节点
                        topItem->setExpanded(true);
                        for (int i = 0; i < topItem->childCount(); ++i) {//折叠子节点下所以节点
                            topItem->child(i)->setExpanded(false);
                        }
                    } else {
                        // 折叠其他顶级节点的所有子节点
                        topItem->setExpanded(false);
                    }
                }
            }
            else {
                // 获取当前点击节点的父节点
                QTreeWidgetItem *parentItem = item->parent();
                for (int i = 0; i < parentItem->childCount(); ++i) {
                    QTreeWidgetItem *topItem = parentItem->child(i);
                    if (topItem == item) {
                        // 展开当前顶级节点的所有子节点
                        topItem->setExpanded(true);
                        for (int i = 0; i < topItem->childCount(); ++i) {//折叠子节点下所以节点
                            topItem->child(i)->setExpanded(false);
                        }
                    } else {
                        // 折叠其他顶级节点的所有子节点
                        topItem->setExpanded(false);
                    }
                }
            }

        });

posted @ 2025-04-09 18:17  小城熊儿  阅读(153)  评论(0)    收藏  举报