fix(vtk): 空态浮层钳进视图不溢出+文案更新;切项目清空中央区
- CenterOverlay::reposition 钳制浮层尺寸≤host、偏移取非负,缩小子视图时不再超界;
空态标题/提示改为与当前功能一致(勾选左侧三维/二维/三维分析栏数据集渲染),标签换行
- 切换项目(topBar projectSwitchRequested / ProjectListDialog projectChosen,带 id≠当前
守卫避开 delete-refresh)先 clearCentral:清三栏(col3D/col2D/colAnalysis setDatasets({}))
+ 清勾选集(checkedProfiles/Analysis/Slice)下发空到 VTK(pushChecked/syncSlices/
setChecked2DDatasets({})) + 恢复空态浮层
build all 绿,341/341。
This commit is contained in:
parent
bec6a376d5
commit
27905511e6
|
|
@ -192,9 +192,15 @@ public:
|
|||
{
|
||||
overlay_->adjustSize();
|
||||
const QSize h = host_->size();
|
||||
const QSize o = overlay_->size();
|
||||
overlay_->move(host_->x() + (h.width() - o.width()) / 2,
|
||||
host_->y() + (h.height() - o.height()) / 2);
|
||||
// 浮层尺寸钳到不超过 host:host 比内容小(窗口/抽屉收窄)时不再溢出视图。
|
||||
QSize o = overlay_->size();
|
||||
o.setWidth(std::min(o.width(), h.width()));
|
||||
o.setHeight(std::min(o.height(), h.height()));
|
||||
overlay_->resize(o);
|
||||
// 偏移取非负:保证浮层矩形始终 ⊆ host 矩形(不跑到 host 外)。
|
||||
const int dx = std::max(0, (h.width() - o.width()) / 2);
|
||||
const int dy = std::max(0, (h.height() - o.height()) / 2);
|
||||
overlay_->move(host_->x() + dx, host_->y() + dy);
|
||||
overlay_->raise();
|
||||
}
|
||||
|
||||
|
|
@ -919,17 +925,19 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
|
|||
.pixmap(56, 56));
|
||||
esIcon->setAlignment(Qt::AlignCenter);
|
||||
|
||||
auto* esTitle = new QLabel(QStringLiteral("选择左侧数据集开始分析"), emptyState);
|
||||
auto* esTitle = new QLabel(QStringLiteral("勾选左侧数据集开始渲染"), emptyState);
|
||||
esTitle->setAlignment(Qt::AlignCenter);
|
||||
esTitle->setWordWrap(true); // 窄时换行,不撑宽浮层
|
||||
geopro::app::applyTokenizedStyleSheet(
|
||||
esTitle, QStringLiteral("color:{{canvas/text}}; font-size:%1px; font-weight:%2;")
|
||||
.arg(geopro::app::scaledPx(geopro::app::type::kHeading))
|
||||
.arg(geopro::app::type::kWeightSemibold));
|
||||
|
||||
auto* esHint = new QLabel(QStringLiteral("单击左侧采集批次,查看反演剖面与异常点\n"
|
||||
"切到「三维视图」可叠加帘面、体素与地形图层"),
|
||||
auto* esHint = new QLabel(QStringLiteral("在左侧「三维数据集 / 二维数据集 / 三维分析」栏勾选数据集,\n"
|
||||
"在此叠加显示;可切换二维 / 三维视图。"),
|
||||
emptyState);
|
||||
esHint->setAlignment(Qt::AlignCenter);
|
||||
esHint->setWordWrap(true); // 窄时换行,不撑宽浮层
|
||||
geopro::app::applyTokenizedStyleSheet(
|
||||
esHint,
|
||||
QStringLiteral("color:{{canvas/text-dim}}; font-size:%1px;").arg(geopro::app::scaledPx(geopro::app::type::kBody)));
|
||||
|
|
@ -1197,8 +1205,33 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
|
|||
};
|
||||
QObject::connect(topBar, &geopro::app::TopBar::workspaceSwitchRequested, &nav,
|
||||
&geopro::controller::WorkbenchNavController::switchWorkspace);
|
||||
|
||||
// 切换到「不同项目」时先清空中央区,避免新项目残留旧项目的三栏数据与 VTK 渲染。
|
||||
// 仅真正换项目用(delete-refresh 等 switchProject(currentProjectId) 不走此处,避免误清)。
|
||||
auto clearCentral = [drawer, sceneCtrl, emptyState, checkedProfiles, checkedAnalysis,
|
||||
pushChecked, lastAnalysisRows, refreshAnalysis, checkedSliceIds,
|
||||
syncSlices]() {
|
||||
// 三栏清空(col2D/col3D setDatasets({}) 会顺带发空勾选 → setChecked2DDatasets({})/帘面清空)。
|
||||
drawer->col3D()->setDatasets({});
|
||||
drawer->col2D()->setDatasets({});
|
||||
*lastAnalysisRows = {};
|
||||
refreshAnalysis(); // 后端分析行清空(客户端三维体仍按设计驻留三维分析栏)
|
||||
// 勾选集清空并下发空到 VTK(帘面/体素/切片/2D 足迹全部撤场)。
|
||||
checkedProfiles->clear();
|
||||
checkedAnalysis->clear();
|
||||
checkedSliceIds->clear();
|
||||
pushChecked(); // setCheckedDatasets({}) → 帘面/体素清空
|
||||
syncSlices(); // 切片随空勾选调和
|
||||
sceneCtrl->setChecked2DDatasets({}); // 2D 足迹显式撤场(与 col2D 空勾选双保险)
|
||||
// 空状态浮层恢复(对象树勾选会随 structureLoaded 重建而清,无需手动)。
|
||||
emptyState->setVisible(true);
|
||||
};
|
||||
|
||||
QObject::connect(topBar, &geopro::app::TopBar::projectSwitchRequested, &nav,
|
||||
&geopro::controller::WorkbenchNavController::switchProject);
|
||||
[&nav, clearCentral](const QString& id) {
|
||||
if (id != nav.currentProjectId()) clearCentral(); // 真正换项目才清
|
||||
nav.switchProject(id);
|
||||
});
|
||||
// 退出登录:清除记住的凭证(QtKeychain+QSettings) → 重启应用回到登录页。
|
||||
QObject::connect(topBar, &geopro::app::TopBar::logoutRequested, &window, []() {
|
||||
geopro::app::forgetSession();
|
||||
|
|
@ -1212,12 +1245,15 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
|
|||
dlg.exec();
|
||||
});
|
||||
QObject::connect(topBar, &geopro::app::TopBar::allProjectsRequested, &window,
|
||||
[&projectRepo, &nav, topBar, &window]() {
|
||||
[&projectRepo, &nav, topBar, &window, clearCentral]() {
|
||||
auto* dlg = new geopro::app::ProjectListDialog(projectRepo, &window);
|
||||
dlg->setAttribute(Qt::WA_DeleteOnClose);
|
||||
QObject::connect(dlg, &geopro::app::ProjectListDialog::projectChosen, &nav,
|
||||
[&nav, topBar](const QString& id, const QString& name) {
|
||||
[&nav, topBar, clearCentral](const QString& id,
|
||||
const QString& name) {
|
||||
topBar->setProjectButtonText(name);
|
||||
if (id != nav.currentProjectId())
|
||||
clearCentral(); // 真正换项目才清
|
||||
nav.switchProject(id);
|
||||
});
|
||||
dlg->exec();
|
||||
|
|
|
|||
Loading…
Reference in New Issue