feat/object-selection-panels #4

Merged
gaozheng merged 18 commits from feat/object-selection-panels into main 2026-06-10 21:33:30 +08:00
1 changed files with 19 additions and 11 deletions
Showing only changes of commit 0d17a00931 - Show all commits

View File

@ -18,22 +18,30 @@ namespace geopro::app {
namespace { namespace {
constexpr int kRoleObjId = Qt::UserRole + 2; // 节点对象 idGS/TM 都存) constexpr int kRoleObjId = Qt::UserRole + 2; // 节点对象 idGS/TM 都存)
constexpr int kRoleConfType = Qt::UserRole + 3; // 1=GS 2=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) { for (const auto& n : nodes) {
auto* item = new QTreeWidgetItem(parent); auto* item = new QTreeWidgetItem(parent);
item->setText(0, QString::fromStdString(n.node.name)); item->setText(0, QString::fromStdString(n.node.name));
item->setData(0, kRoleObjId, QString::fromStdString(n.node.id)); if (topLevel) {
if (n.isTm) { // 项目根:非交互容器(不设 kRoleObjId/kRoleConfType不可勾选
item->setData(0, kRoleConfType, 2);
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
item->setCheckState(0, Qt::Unchecked);
} else { } else {
item->setData(0, kRoleConfType, 1); // GS item->setData(0, kRoleObjId, QString::fromStdString(n.node.id));
item->setFlags(item->flags() | Qt::ItemIsUserCheckable | Qt::ItemIsAutoTristate); if (n.isTm) {
item->setCheckState(0, Qt::Unchecked); 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 } // namespace
@ -94,7 +102,7 @@ void ObjectTreePanel::setStructure(const QString& projectName,
} }
hint_->setVisible(false); hint_->setVisible(false);
tree_->setVisible(true); tree_->setVisible(true);
addNodes(tree_->invisibleRootItem(), roots); // 结构已含项目根节点,直接渲染 addNodes(tree_->invisibleRootItem(), roots, true); // 结构已含项目根节点,根为非交互容器
tree_->expandAll(); tree_->expandAll();
} }