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