From 3aa4e1bfe206ba18a9b23ffcc776d0c536154efd Mon Sep 17 00:00:00 2001 From: gaozheng Date: Wed, 10 Jun 2026 10:27:33 +0800 Subject: [PATCH] =?UTF-8?q?feat(ela):=20=E8=A7=86=E5=9B=BE/=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E5=B7=A5=E5=85=B7=E6=9D=A1=20=E2=86=92=20ElaToolButto?= =?UTF-8?q?n=20=E8=A1=8C(=E6=9B=BF=20QToolBar+QAction)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 视图工具条(二维地图/三维视图): QToolBar+QActionGroup → QWidget+QHBoxLayout+ElaToolButton+QButtonGroup(互斥) - 详情工具条(原数据/网格数据 互斥 + 显示异常/电极/等值线 开关): 同上 + QFrame 分隔 - 连接: QAction::triggered→QAbstractButton::clicked, QAction::toggled→QAbstractButton::toggled; 视图模式/详情模式/叠加显隐 行为保持 - 注: 工具条交互(2D/3D 切换/详情模式/三个显隐开关)为活逻辑, 需运行验证 --- src/app/main.cpp | 86 +++++++++++++++++++++++++++++++----------------- 1 file changed, 56 insertions(+), 30 deletions(-) diff --git a/src/app/main.cpp b/src/app/main.cpp index 0d80ffd..7bc58b6 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -31,7 +31,9 @@ #include #include #include +#include #include +#include #include #include #include @@ -67,6 +69,7 @@ #include #include #include +#include #include #include "model/ColorScale.hpp" @@ -324,16 +327,24 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re centerLayout->setContentsMargins(0, 0, 0, 0); centerLayout->setSpacing(0); - // 工具条:「二维地图/三维视图」两个互斥可勾选 action。切换=按当前勾选集重建对应内容。默认二维地图。 - auto* viewToolBar = new QToolBar(); - auto* viewGroup = new QActionGroup(viewToolBar); + // 工具条:「二维地图/三维视图」两个互斥可勾选按钮(Fluent ElaToolButton)。默认二维地图。 + auto* viewToolBar = new QWidget(); + auto* viewBarLay = new QHBoxLayout(viewToolBar); + viewBarLay->setContentsMargins(8, 6, 8, 6); + viewBarLay->setSpacing(6); + auto* viewGroup = new QButtonGroup(viewToolBar); viewGroup->setExclusive(true); - auto* act2D = viewToolBar->addAction(QStringLiteral("二维地图")); - auto* act3D = viewToolBar->addAction(QStringLiteral("三维视图")); + auto* act2D = new ElaToolButton(viewToolBar); + act2D->setText(QStringLiteral("二维地图")); act2D->setCheckable(true); + auto* act3D = new ElaToolButton(viewToolBar); + act3D->setText(QStringLiteral("三维视图")); act3D->setCheckable(true); - viewGroup->addAction(act2D); - viewGroup->addAction(act3D); + viewGroup->addButton(act2D); + viewGroup->addButton(act3D); + viewBarLay->addWidget(act2D); + viewBarLay->addWidget(act3D); + viewBarLay->addStretch(); act2D->setChecked(true); // 默认二维地图 centerLayout->addWidget(viewToolBar); centerLayout->addWidget(vtkWidget, 1); @@ -462,27 +473,42 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re detailLayout->setContentsMargins(0, 0, 0, 0); detailLayout->setSpacing(0); - // 工具条对齐原型:「原数据 | 网格数据」互斥 +「显示异常」开关。 - auto* detailToolBar = new QToolBar(); - auto* detailGroup = new QActionGroup(detailToolBar); + // 工具条对齐原型:「原数据 | 网格数据」互斥 +「显示异常/电极/等值线」开关(Fluent ElaToolButton)。 + auto* detailToolBar = new QWidget(); + auto* detailBarLay = new QHBoxLayout(detailToolBar); + detailBarLay->setContentsMargins(8, 6, 8, 6); + detailBarLay->setSpacing(6); + auto makeBarBtn = [detailToolBar](const QString& text, bool checkable) { + auto* b = new ElaToolButton(detailToolBar); + b->setText(text); + b->setCheckable(checkable); + return b; + }; + auto* detailGroup = new QButtonGroup(detailToolBar); detailGroup->setExclusive(true); - auto* actScatter = detailToolBar->addAction(QStringLiteral("原数据")); - auto* actSection = detailToolBar->addAction(QStringLiteral("网格数据")); - actScatter->setCheckable(true); - actSection->setCheckable(true); - detailGroup->addAction(actScatter); - detailGroup->addAction(actSection); + auto* actScatter = makeBarBtn(QStringLiteral("原数据"), true); + auto* actSection = makeBarBtn(QStringLiteral("网格数据"), true); + detailGroup->addButton(actScatter); + detailGroup->addButton(actSection); + detailBarLay->addWidget(actScatter); + detailBarLay->addWidget(actSection); actSection->setChecked(true); // 默认网格数据 (#18) - detailToolBar->addSeparator(); - auto* actShowAnomaly = detailToolBar->addAction(QStringLiteral("显示异常")); - actShowAnomaly->setCheckable(true); + auto* barSep = new QFrame(detailToolBar); + barSep->setFrameShape(QFrame::VLine); + barSep->setObjectName(QStringLiteral("topDivider")); + detailBarLay->addSpacing(4); + detailBarLay->addWidget(barSep); + detailBarLay->addSpacing(4); + auto* actShowAnomaly = makeBarBtn(QStringLiteral("显示异常"), true); actShowAnomaly->setChecked(true); // 默认显示异常(对齐原型 ☑显示异常) - auto* actShowElectrodes = detailToolBar->addAction(QStringLiteral("显示电极")); - actShowElectrodes->setCheckable(true); + auto* actShowElectrodes = makeBarBtn(QStringLiteral("显示电极"), true); actShowElectrodes->setChecked(true); // 默认显示电极 ▼(对齐原型) - auto* actShowContour = detailToolBar->addAction(QStringLiteral("显示等值线")); - actShowContour->setCheckable(true); + auto* actShowContour = makeBarBtn(QStringLiteral("显示等值线"), true); actShowContour->setChecked(true); // 默认显示等值线(对齐原型) + detailBarLay->addWidget(actShowAnomaly); + detailBarLay->addWidget(actShowElectrodes); + detailBarLay->addWidget(actShowContour); + detailBarLay->addStretch(); detailLayout->addWidget(detailToolBar); detailLayout->addWidget(detailWidget, 1); @@ -746,29 +772,29 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re }); // ── 数据详情工具条「反演剖面/原数据」:切模式 → 重建数据详情 ── - QObject::connect(actSection, &QAction::triggered, detailWidget, + QObject::connect(actSection, &QAbstractButton::clicked, detailWidget, [detailMode, rebuildDetail]() { *detailMode = DetailMode::Section18; rebuildDetail(); }); - QObject::connect(actScatter, &QAction::triggered, detailWidget, + QObject::connect(actScatter, &QAbstractButton::clicked, detailWidget, [detailMode, rebuildDetail]() { *detailMode = DetailMode::Scatter17; rebuildDetail(); }); // ──「显示异常 / 显示电极 / 显示等值线」开关:切换叠加 → 重建数据详情 ── - QObject::connect(actShowAnomaly, &QAction::toggled, detailWidget, + QObject::connect(actShowAnomaly, &QAbstractButton::toggled, detailWidget, [showAnomalies, rebuildDetail](bool on) { *showAnomalies = on; rebuildDetail(); }); - QObject::connect(actShowElectrodes, &QAction::toggled, detailWidget, + QObject::connect(actShowElectrodes, &QAbstractButton::toggled, detailWidget, [showElectrodes, rebuildDetail](bool on) { *showElectrodes = on; rebuildDetail(); }); - QObject::connect(actShowContour, &QAction::toggled, detailWidget, + QObject::connect(actShowContour, &QAbstractButton::toggled, detailWidget, [showContour, rebuildDetail](bool on) { *showContour = on; rebuildDetail(); @@ -787,13 +813,13 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re }; // ── 工具条「二维地图/三维视图」:切换互斥视图 → 重建内容 + 图层浮层显隐 ── - QObject::connect(act2D, &QAction::triggered, vtkWidget, + QObject::connect(act2D, &QAbstractButton::clicked, vtkWidget, [viewMode, rebuildCentral, showLayerPanel]() { *viewMode = ViewMode::Map2D; showLayerPanel(false); rebuildCentral(); }); - QObject::connect(act3D, &QAction::triggered, vtkWidget, + QObject::connect(act3D, &QAbstractButton::clicked, vtkWidget, [viewMode, rebuildCentral, showLayerPanel]() { *viewMode = ViewMode::View3D; showLayerPanel(true);