feat/object-selection-panels #4
|
|
@ -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<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();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue