fix(canvas): 空状态去不透明卡片(移除OpacityEffect) + 视图详情转深色画布浮层(规范§6.5/§7.11)

This commit is contained in:
gaozheng 2026-06-10 16:03:21 +08:00
parent 58cabc6350
commit 8eb0c7413d
1 changed files with 7 additions and 16 deletions

View File

@ -349,19 +349,19 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
// 仅三维视图显示;含 帘面 / 体素 勾选(体素=两交叉测线散点配准 IDW 的派生层,正确归宿)。 // 仅三维视图显示;含 帘面 / 体素 勾选(体素=两交叉测线散点配准 IDW 的派生层,正确归宿)。
auto* layerPanel = new QFrame(centerWidget); auto* layerPanel = new QFrame(centerWidget);
layerPanel->setFrameShape(QFrame::StyledPanel); layerPanel->setFrameShape(QFrame::StyledPanel);
geopro::app::applyThemedStyleSheet( geopro::app::applyTokenizedStyleSheet(
layerPanel, layerPanel,
QStringLiteral("QFrame{background:#FFFFFF;border:1px solid #D5DBE5;border-radius:8px;}" QStringLiteral("QFrame{background:{{canvas/bg-soft}};border:1px solid {{canvas/grid}};border-radius:8px;}"
"QCheckBox{padding:2px 1px;color:#1F2A3D;}" "QCheckBox{padding:2px 1px;color:{{canvas/text}};}"
"QCheckBox:disabled{color:#9AA6B6;}")); "QCheckBox:disabled{color:{{canvas/text-dim}};}"));
auto* layerLayout = new QVBoxLayout(layerPanel); auto* layerLayout = new QVBoxLayout(layerPanel);
// 浮层内边距取间距令牌:左右 lg(12)、上下 ml(10),对称(原 13/10/15/11 是手调奇数)。 // 浮层内边距取间距令牌:左右 lg(12)、上下 ml(10),对称(原 13/10/15/11 是手调奇数)。
layerLayout->setContentsMargins(geopro::app::space::kLg, geopro::app::space::kMl, layerLayout->setContentsMargins(geopro::app::space::kLg, geopro::app::space::kMl,
geopro::app::space::kLg, geopro::app::space::kMl); geopro::app::space::kLg, geopro::app::space::kMl);
layerLayout->setSpacing(geopro::app::space::kSm); layerLayout->setSpacing(geopro::app::space::kSm);
auto* layerTitle = new QLabel(QStringLiteral("视图详情")); auto* layerTitle = new QLabel(QStringLiteral("视图详情"));
geopro::app::applyThemedStyleSheet( geopro::app::applyTokenizedStyleSheet(
layerTitle, QStringLiteral("font-weight:%1;color:#2D6CB5;border:none;background:transparent;" layerTitle, QStringLiteral("font-weight:%1;color:{{canvas/text}};border:none;background:transparent;"
"padding-bottom:3px;font-size:%2px;") "padding-bottom:3px;font-size:%2px;")
.arg(geopro::app::type::kWeightSemibold) .arg(geopro::app::type::kWeightSemibold)
.arg(geopro::app::scaledPx(geopro::app::type::kTitle))); .arg(geopro::app::scaledPx(geopro::app::type::kTitle)));
@ -397,6 +397,7 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
auto* emptyState = new QFrame(centerWidget); auto* emptyState = new QFrame(centerWidget);
emptyState->setObjectName(QStringLiteral("centralEmpty")); emptyState->setObjectName(QStringLiteral("centralEmpty"));
emptyState->setAttribute(Qt::WA_TransparentForMouseEvents); emptyState->setAttribute(Qt::WA_TransparentForMouseEvents);
emptyState->setAttribute(Qt::WA_TranslucentBackground); // 透明浮于深色画布(不让控件填充不透明底)
emptyState->setStyleSheet(QStringLiteral( emptyState->setStyleSheet(QStringLiteral(
"#centralEmpty { background: transparent; }" "#centralEmpty { background: transparent; }"
"#centralEmpty QLabel { background: transparent; }")); "#centralEmpty QLabel { background: transparent; }"));
@ -435,16 +436,6 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
auto* emptyCentering = new CenterOverlay(emptyState, vtkWidget); auto* emptyCentering = new CenterOverlay(emptyState, vtkWidget);
emptyCentering->reposition(); emptyCentering->reposition();
// 引导层淡入350ms仅透明度OutCubic首屏空态出现的克制过渡不阻塞任务。
auto* esFx = new QGraphicsOpacityEffect(emptyState);
emptyState->setGraphicsEffect(esFx);
auto* esAnim = new QPropertyAnimation(esFx, "opacity", emptyState);
esAnim->setDuration(350);
esAnim->setStartValue(0.0);
esAnim->setEndValue(1.0);
esAnim->setEasingCurve(QEasingCurve::OutCubic);
esAnim->start(QAbstractAnimation::DeleteWhenStopped);
auto* vtkDock = new ads::CDockWidget(QStringLiteral("二维地图/三维视图")); auto* vtkDock = new ads::CDockWidget(QStringLiteral("二维地图/三维视图"));
vtkDock->setWidget(centerWidget); vtkDock->setWidget(centerWidget);
auto* centerDockArea = dockManager->addDockWidget(ads::CenterDockWidgetArea, vtkDock); auto* centerDockArea = dockManager->addDockWidget(ads::CenterDockWidgetArea, vtkDock);