fix(ui): 对象树项目根设为非交互容器(仅 GS/TM 可勾选/单击)

This commit is contained in:
gaozheng 2026-06-10 20:58:09 +08:00
parent 68296a5d36
commit 0d17a00931
1 changed files with 19 additions and 11 deletions

View File

@ -18,22 +18,30 @@ namespace geopro::app {
namespace {
constexpr int kRoleObjId = Qt::UserRole + 2; // 节点对象 idGS/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<data::dto::StructTreeNode>& nodes) {
// topLevel=true 仅用于项目根:渲染为非交互容器(既不可勾选,也不发 objectClicked
void addNodes(QTreeWidgetItem* parent, const std::vector<data::dto::StructTreeNode>& 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();
}