fix(radar): 导入入口从隐藏菜单栏改到三维体段头按钮(app无原生菜单栏)
根因:app 经 window.setMenuWidget(TopBar) 占用 QMainWindow 菜单栏槽位, 原生 QMenuBar 不显示(全 app 无菜单栏),故 Task8 放在 menuBar() 的「三维雷达」 菜单根本看不到。 修复:入口迁到三维体(voxel)段头「+ 导入雷达测线」按钮(QToolButton+InstantPopup, 镜像现有「+新增三维体」),弹出 规范化(.head/.data)/Impulse(.iprb) 两项 → CategorySection.radarImportRequested(impulse) → CategoryAnalysisTab 转发 → main.cpp 走原导入流程。删除死的 menuBar 代码 + QMenuBar include。
This commit is contained in:
parent
e48b679255
commit
63ab099f76
|
|
@ -52,7 +52,6 @@
|
|||
#include <QJsonObject>
|
||||
#include <QLibraryInfo>
|
||||
#include <QMenu>
|
||||
#include <QMenuBar>
|
||||
#include <QMessageBox>
|
||||
#include <QPoint>
|
||||
#include <QSet>
|
||||
|
|
@ -981,12 +980,13 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
|
|||
analysisTab->scrollItemToTop(qid); // 新三维体行尽量滚到分析栏顶部
|
||||
});
|
||||
});
|
||||
// 本地导入三维雷达测线目录(后端未就绪的过渡入口):选目录+前缀 → registerRadarDataset(登记dd_radar_3d DS) → 勾选→后台建体渲染。
|
||||
{
|
||||
QMenu* radarMenu = window.menuBar()->addMenu(QStringLiteral("三维雷达"));
|
||||
QAction* importAct = radarMenu->addAction(QStringLiteral("导入测线目录(本地)…"));
|
||||
QObject::connect(importAct, &QAction::triggered, &window,
|
||||
[&window, scene3dRepo, refreshAnalysis, analysisTab]() {
|
||||
// 本地导入三维雷达测线(后端未就绪的过渡入口):入口=三维体段头「+ 导入雷达测线」按钮(CategorySection)
|
||||
// → analysisTab.radarImportRequested(impulse)。app 无原生菜单栏(menuBar 被 TopBar 经 setMenuWidget 占用),
|
||||
// 故入口放可见的段头按钮。impulse=false 走规范化(.head/.data, 懒加载后台建体);true 走 Impulse(.iprb, eager)。
|
||||
QObject::connect(
|
||||
analysisTab, &geopro::app::CategoryAnalysisTab::radarImportRequested, &window,
|
||||
[&window, scene3dRepo, refreshAnalysis, analysisTab, vtkLoading](bool impulse) {
|
||||
if (!impulse) { // 规范化 .head/.data → registerRadarDataset(dd_radar_3d, 懒加载后台建体)
|
||||
const QString dir = QFileDialog::getExistingDirectory(
|
||||
&window, QStringLiteral("选择规范化三维雷达测线目录(含 *.head/*.data)"));
|
||||
if (dir.isEmpty()) return;
|
||||
|
|
@ -1002,15 +1002,11 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
|
|||
{ const QSignalBlocker block(analysisTab); refreshAnalysis(); } // DS 进三维体段(不触发渲染)
|
||||
const QString qid = QString::fromStdString(newId);
|
||||
analysisTab->setItemChecked(qid, true); // 勾选 → addDatasetAsync → loadVolume 后台建体渲染
|
||||
analysisTab->setItemBusy(qid, true); // spinner; 渲染完成由 datasetRendered 撤(main.cpp:987)
|
||||
analysisTab->setItemBusy(qid, true); // spinner; 渲染完成由 datasetRendered 撤
|
||||
analysisTab->scrollItemToTop(qid);
|
||||
});
|
||||
// 明星路 Impulse(.iprb) 本地导入:复用现成 createGprVolume(eager 同步建体,预填 cachedGrid)。
|
||||
// 双数据集互证:证下游渲染/切片/异常对 14ch(Impulse)/16ch(Mala) 几何无关。
|
||||
QAction* importImpulseAct =
|
||||
radarMenu->addAction(QStringLiteral("导入Impulse测线目录(.iprb)…"));
|
||||
QObject::connect(importImpulseAct, &QAction::triggered, &window,
|
||||
[&window, scene3dRepo, refreshAnalysis, analysisTab, vtkLoading]() {
|
||||
return;
|
||||
}
|
||||
// 明星路 Impulse(.iprb):复用现成 createGprVolume(eager 同步建体,预填 cachedGrid)。双数据集互证下游几何无关。
|
||||
const QString dir = QFileDialog::getExistingDirectory(
|
||||
&window, QStringLiteral("选择 Impulse 测线目录(含 *.iprb/*.ord)"));
|
||||
if (dir.isEmpty()) return;
|
||||
|
|
@ -1037,12 +1033,11 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
|
|||
vtkLoading->hide();
|
||||
const QString qid = QString::fromStdString(newId);
|
||||
// createGprVolume 预填 cachedGrid → setItemChecked 内 loadVolume 同步渲染、datasetRendered 自动撤 busy;
|
||||
// 故此处【不要】再 setItemBusy(true)(否则 spinner 永久转圈 —— 评审 MEDIUM)。
|
||||
// 故此处【不要】再 setItemBusy(true)(否则 spinner 永久转圈)。
|
||||
analysisTab->setItemChecked(qid, true);
|
||||
analysisTab->scrollItemToTop(qid);
|
||||
});
|
||||
});
|
||||
}
|
||||
// 任一数据集(剖面/体)异步加载开始 → 列表项复选框转等待 spinner;渲染完成 → 复原复选框。
|
||||
// 覆盖非三维体:勾选剖面首次渲染较慢时也有等待反馈(用户反馈)。
|
||||
QObject::connect(sceneCtrl, &geopro::controller::VtkSceneController::datasetLoading, analysisTab,
|
||||
|
|
|
|||
|
|
@ -47,6 +47,8 @@ CategoryAnalysisTab::CategoryAnalysisTab(geopro::data::DatasetFieldDictionary* d
|
|||
});
|
||||
connect(sec, &CategorySection::generateVolumeRequested, this,
|
||||
&CategoryAnalysisTab::generateVolumeRequested);
|
||||
connect(sec, &CategorySection::radarImportRequested, this,
|
||||
&CategoryAnalysisTab::radarImportRequested);
|
||||
connect(sec, &CategorySection::detailRequested, this, &CategoryAnalysisTab::detailRequested);
|
||||
connect(sec, &CategorySection::deleteDatasetRequested, this,
|
||||
&CategoryAnalysisTab::deleteDatasetRequested);
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ public:
|
|||
signals:
|
||||
void checkedDatasetsChanged(const QStringList& dsIds); // 5 段勾选并集
|
||||
void generateVolumeRequested(const QString& dsTypeCode, const QStringList& sourceDsIds);
|
||||
void radarImportRequested(bool impulse); // 三维体段头「+导入雷达测线」(false=规范化, true=Impulse)
|
||||
void detailRequested(const QString& dsId, const QString& ddCode, const QString& name);
|
||||
void deleteDatasetRequested(const QString& dsId, const QString& ddCode); // 右键删除切片/异常
|
||||
// ── 三维体段操作转发(迁自旧 Column3DAnalysis,全接)──
|
||||
|
|
|
|||
|
|
@ -83,6 +83,32 @@ CategorySection::CategorySection(const CategorySpec& spec, geopro::data::Dataset
|
|||
});
|
||||
hl->addWidget(gen);
|
||||
}
|
||||
// 三维体段头「+ 导入雷达测线」(后端未就绪的本地过渡入口):弹出菜单选 规范化/Impulse。
|
||||
// 次级强调按钮样式同「+新增三维体」;点击发 radarImportRequested(impulse) → 上层走导入流程。
|
||||
if (spec_.id == "voxel") {
|
||||
auto* imp = new QToolButton(headerRow);
|
||||
imp->setText(QStringLiteral("+ 导入雷达测线"));
|
||||
imp->setCursor(Qt::PointingHandCursor);
|
||||
imp->setPopupMode(QToolButton::InstantPopup);
|
||||
applyTokenizedStyleSheet(
|
||||
imp, QStringLiteral(
|
||||
"QToolButton{border:1px solid {{accent/primary}};border-radius:%1px;"
|
||||
"color:{{accent/primary}};background:transparent;padding:%2px %3px;font-size:%4px;}"
|
||||
"QToolButton::menu-indicator{image:none;width:0;}"
|
||||
"QToolButton:hover{background:{{bg/selected}};}"
|
||||
"QToolButton:pressed{background:{{bg/hover}};}")
|
||||
.arg(radius::kSm)
|
||||
.arg(scaledPx(space::kXxs))
|
||||
.arg(scaledPx(space::kMd))
|
||||
.arg(scaledPx(type::kCaption)));
|
||||
auto* menu = new QMenu(imp);
|
||||
menu->addAction(QStringLiteral("规范化测线目录(.head/.data)…"), this,
|
||||
[this] { emit radarImportRequested(false); });
|
||||
menu->addAction(QStringLiteral("Impulse 测线目录(.iprb)…"), this,
|
||||
[this] { emit radarImportRequested(true); });
|
||||
imp->setMenu(menu);
|
||||
hl->addWidget(imp);
|
||||
}
|
||||
root->addWidget(headerRow);
|
||||
|
||||
body_ = new QWidget(this);
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ signals:
|
|||
void checkedDatasetsChanged(const QStringList& dsIds); // 数据行勾选=渲染
|
||||
void collapsedChanged(); // 折叠/展开切换 → 外层 CategoryAnalysisTab 重排各段 stretch
|
||||
void generateVolumeRequested(const QString& dsTypeCode, const QStringList& sourceDsIds); // 段头「+新增三维体」
|
||||
void radarImportRequested(bool impulse); // 三维体段头「+导入雷达测线」(false=规范化 .head/.data, true=Impulse .iprb)
|
||||
void detailRequested(const QString& dsId, const QString& ddCode, const QString& name); // 双击/右键=详情
|
||||
void deleteDatasetRequested(const QString& dsId, const QString& ddCode); // 右键删除(切片/异常)
|
||||
// ── 三维体段右键操作(迁自旧 Column3DAnalysis,全接)──
|
||||
|
|
|
|||
Loading…
Reference in New Issue