refactor/pure-qt-ui #3

Merged
gaozheng merged 56 commits from refactor/pure-qt-ui into main 2026-06-10 18:41:53 +08:00
1 changed files with 56 additions and 30 deletions
Showing only changes of commit 3aa4e1bfe2 - Show all commits

View File

@ -31,7 +31,9 @@
#include <QEasingCurve>
#include <QEvent>
#include <QFile>
#include <QButtonGroup>
#include <QFrame>
#include <QHBoxLayout>
#include <QGraphicsOpacityEffect>
#include <QLabel>
#include <QModelIndex>
@ -67,6 +69,7 @@
#include <ElaDef.h>
#include <ElaListView.h>
#include <ElaTheme.h>
#include <ElaToolButton.h>
#include <ElaWindow.h>
#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);