diff --git a/src/app/main.cpp b/src/app/main.cpp index 61825a3..ac871f8 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -446,9 +446,10 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re // ForceNoScrollArea:禁止 ADS 默认把整块内容(含标题栏/页签栏)包进 QScrollArea。 // 否则内容最小尺寸超过 dock 时,整个面板(标题+页签+图)一起滚动。改为内容自适应填充; // 需要时由内层(图表内容区)自行滚动,标题/页签固定。 - detailDock->setWidget(wrapWithHeader( - geopro::app::Glyph::Detail, QStringLiteral("数据详情"), detailPanel), - ads::CDockWidget::ForceNoScrollArea); + auto* detailHeader = wrapWithHeader( + geopro::app::Glyph::Detail, QStringLiteral("数据详情"), detailPanel, + {{geopro::app::Glyph::Fullscreen, QStringLiteral("全屏")}}); + detailDock->setWidget(detailHeader, ads::CDockWidget::ForceNoScrollArea); // 放在中央视图下方。 dockManager->addDockWidget(ads::BottomDockWidgetArea, detailDock, centerDockArea); @@ -722,6 +723,39 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re return nullptr; }; + // ── 全屏切换:VTK视图 / 数据详情 表头右上角「全屏」按钮 ────────────────────────── + // 点击 → 目标 dock 全屏(隐藏其余所有 dock);再点 → 还原(全部显示)。 + // 使用 ADS CDockWidget::toggleView(bool) 控制可见性(标准 ADS API,v4+)。 + { + const QList allDocks{vtkDock, detailDock, leftDock, datasetDock, + rightDock, propDock}; + auto applyFullscreen = [](ads::CDockWidget* target, + const QList& all, bool on) { + for (ads::CDockWidget* d : all) { + if (d == target) continue; + d->toggleView(!on); // on=进入全屏→隐藏其它; off=还原→全部显示 + } + }; + + auto* vtkFsBtn = findHeaderAction(viewHeader, geopro::app::Glyph::Fullscreen); + auto* detailFsBtn = findHeaderAction(detailHeader, geopro::app::Glyph::Fullscreen); + + if (vtkFsBtn) { + vtkFsBtn->setCheckable(true); + QObject::connect(vtkFsBtn, &QToolButton::toggled, &window, + [applyFullscreen, vtkDock, allDocks](bool on) { + applyFullscreen(vtkDock, allDocks, on); + }); + } + if (detailFsBtn) { + detailFsBtn->setCheckable(true); + QObject::connect(detailFsBtn, &QToolButton::toggled, &window, + [applyFullscreen, detailDock, allDocks](bool on) { + applyFullscreen(detailDock, allDocks, on); + }); + } + } + // 对象树右键菜单动作路由。 QObject::connect( objectTree, &geopro::app::ObjectTreePanel::contextActionRequested, &window, @@ -1129,7 +1163,7 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re if (!geo.isEmpty()) window.restoreGeometry(geo); // 注意:ADS 按 dock 唯一名作键。改过 dock 名后旧布局会失配 → bump 此键丢弃旧布局, // 回落到下方 addDockWidget 的默认排布(再改 dock 名时同样要 bump 版本号)。 - const QByteArray dockState = settings.value(QStringLiteral("ui/dockState_v2")).toByteArray(); + const QByteArray dockState = settings.value(QStringLiteral("ui/dockState_v3")).toByteArray(); if (!dockState.isEmpty()) { dockManager->restoreState(dockState); // restoreState 重建停靠区会重新显示 ADS 标题栏,再隐藏一次保持“无双标题”。 @@ -1140,7 +1174,7 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re QObject::connect(qApp, &QCoreApplication::aboutToQuit, dockManager, [dockManager, &window]() { QSettings settings; settings.setValue(QStringLiteral("ui/geometry"), window.saveGeometry()); - settings.setValue(QStringLiteral("ui/dockState_v2"), dockManager->saveState()); + settings.setValue(QStringLiteral("ui/dockState_v3"), dockManager->saveState()); }); }