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);
}
}
}
});

浙公网安备 33010602011771号