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