From 0d17a009319ba5bab9161f14da079b35c95a741f Mon Sep 17 00:00:00 2001 From: gaozheng Date: Wed, 10 Jun 2026 20:58:09 +0800 Subject: [PATCH] =?UTF-8?q?fix(ui):=20=E5=AF=B9=E8=B1=A1=E6=A0=91=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E6=A0=B9=E8=AE=BE=E4=B8=BA=E9=9D=9E=E4=BA=A4=E4=BA=92?= =?UTF-8?q?=E5=AE=B9=E5=99=A8=EF=BC=88=E4=BB=85=20GS/TM=20=E5=8F=AF?= =?UTF-8?q?=E5=8B=BE=E9=80=89/=E5=8D=95=E5=87=BB=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/panels/ObjectTreePanel.cpp | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/src/app/panels/ObjectTreePanel.cpp b/src/app/panels/ObjectTreePanel.cpp index 0e48af4..1b20b29 100644 --- a/src/app/panels/ObjectTreePanel.cpp +++ b/src/app/panels/ObjectTreePanel.cpp @@ -18,22 +18,30 @@ namespace geopro::app { namespace { constexpr int kRoleObjId = Qt::UserRole + 2; // 节点对象 id(GS/TM 都存) constexpr int kRoleConfType = Qt::UserRole + 3; // 1=GS 2=TM +constexpr int kConfTypeGs = 1; // GS(工区) +constexpr int kConfTypeTm = 2; // TM 叶子 -void addNodes(QTreeWidgetItem* parent, const std::vector& nodes) { +// topLevel=true 仅用于项目根:渲染为非交互容器(既不可勾选,也不发 objectClicked)。 +void addNodes(QTreeWidgetItem* parent, const std::vector& nodes, + bool topLevel) { for (const auto& n : nodes) { auto* item = new QTreeWidgetItem(parent); item->setText(0, QString::fromStdString(n.node.name)); - item->setData(0, kRoleObjId, QString::fromStdString(n.node.id)); - if (n.isTm) { - item->setData(0, kRoleConfType, 2); - item->setFlags(item->flags() | Qt::ItemIsUserCheckable); - item->setCheckState(0, Qt::Unchecked); + if (topLevel) { + // 项目根:非交互容器(不设 kRoleObjId/kRoleConfType,不可勾选)。 } else { - item->setData(0, kRoleConfType, 1); // GS - item->setFlags(item->flags() | Qt::ItemIsUserCheckable | Qt::ItemIsAutoTristate); - item->setCheckState(0, Qt::Unchecked); + item->setData(0, kRoleObjId, QString::fromStdString(n.node.id)); + if (n.isTm) { + item->setData(0, kRoleConfType, kConfTypeTm); + item->setFlags(item->flags() | Qt::ItemIsUserCheckable); + item->setCheckState(0, Qt::Unchecked); + } else { + item->setData(0, kRoleConfType, kConfTypeGs); // GS + item->setFlags(item->flags() | Qt::ItemIsUserCheckable | Qt::ItemIsAutoTristate); + item->setCheckState(0, Qt::Unchecked); + } } - addNodes(item, n.children); + addNodes(item, n.children, false); // 子层永远非顶层 } } } // namespace @@ -94,7 +102,7 @@ void ObjectTreePanel::setStructure(const QString& projectName, } hint_->setVisible(false); tree_->setVisible(true); - addNodes(tree_->invisibleRootItem(), roots); // 结构已含项目根节点,直接渲染 + addNodes(tree_->invisibleRootItem(), roots, true); // 结构已含项目根节点,根为非交互容器 tree_->expandAll(); }