refactor/pure-qt-ui #3

Merged
gaozheng merged 56 commits from refactor/pure-qt-ui into main 2026-06-10 18:41:53 +08:00
2 changed files with 18 additions and 11 deletions
Showing only changes of commit 9e80b2fea1 - Show all commits

View File

@ -85,7 +85,7 @@ QWidget* buildPanelHeader(Glyph icon, const QString& title, const QVector<Header
auto* lay = new QHBoxLayout(header); auto* lay = new QHBoxLayout(header);
lay->setContentsMargins(12, 0, 8, 0); lay->setContentsMargins(12, 0, 8, 0);
lay->setSpacing(8); lay->setSpacing(geopro::app::space::kSm);
auto* iconLbl = new QLabel(header); auto* iconLbl = new QLabel(header);
setThemedGlyph(iconLbl, icon, kTitleIcon); // 随主题着色(暗色下也清晰) setThemedGlyph(iconLbl, icon, kTitleIcon); // 随主题着色(暗色下也清晰)

View File

@ -330,6 +330,11 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
" font-size:%1px; }" " font-size:%1px; }"
"QToolButton:hover{ background:{{bg/hover}}; }" "QToolButton:hover{ background:{{bg/hover}}; }"
"QToolButton:checked{ color:{{accent/primary}}; font-weight:%2;" "QToolButton:checked{ color:{{accent/primary}}; font-weight:%2;"
" border-bottom:2px solid {{accent/primary}}; }"
"QToolButton#dataTab{ border:none; border-radius:0; background:transparent;"
" border-bottom:2px solid transparent; color:{{text/secondary}}; padding:8px 8px; }"
"QToolButton#dataTab:hover{ color:{{text/primary}}; background:transparent; }"
"QToolButton#dataTab:checked{ color:{{accent/primary}}; font-weight:%2;"
" border-bottom:2px solid {{accent/primary}}; }") " border-bottom:2px solid {{accent/primary}}; }")
.arg(geopro::app::scaledPx(geopro::app::type::kBody)) .arg(geopro::app::scaledPx(geopro::app::type::kBody))
.arg(geopro::app::type::kWeightSemibold); .arg(geopro::app::type::kWeightSemibold);
@ -482,6 +487,8 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
detailGroup->setExclusive(true); detailGroup->setExclusive(true);
auto* actScatter = makeBarBtn(QStringLiteral("原数据"), true); auto* actScatter = makeBarBtn(QStringLiteral("原数据"), true);
auto* actSection = makeBarBtn(QStringLiteral("网格数据"), true); auto* actSection = makeBarBtn(QStringLiteral("网格数据"), true);
actScatter->setObjectName(QStringLiteral("dataTab"));
actSection->setObjectName(QStringLiteral("dataTab"));
detailGroup->addButton(actScatter); detailGroup->addButton(actScatter);
detailGroup->addButton(actSection); detailGroup->addButton(actSection);
detailBarLay->addWidget(actScatter); detailBarLay->addWidget(actScatter);
@ -517,8 +524,8 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
// 左上 dock对象树真实结构项目根 → GS → TM。被动视图数据由控制器推送。 // 左上 dock对象树真实结构项目根 → GS → TM。被动视图数据由控制器推送。
auto* objectTree = new geopro::app::ObjectTreePanel(); auto* objectTree = new geopro::app::ObjectTreePanel();
auto* leftDock = new ads::CDockWidget(QStringLiteral("对象显示栏")); auto* leftDock = new ads::CDockWidget(QStringLiteral("对象"));
leftDock->setWidget(wrapWithHeader(geopro::app::Glyph::Tree, QStringLiteral("对象显示栏"), leftDock->setWidget(wrapWithHeader(geopro::app::Glyph::Tree, QStringLiteral("对象"),
objectTree, objectTree,
{{geopro::app::Glyph::Plus, QStringLiteral("新建对象")}})); {{geopro::app::Glyph::Plus, QStringLiteral("新建对象")}}));
auto* leftArea = dockManager->addDockWidget(ads::LeftDockWidgetArea, leftDock); auto* leftArea = dockManager->addDockWidget(ads::LeftDockWidgetArea, leftDock);
@ -531,9 +538,9 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
auto* fileList = new QListWidget(); auto* fileList = new QListWidget();
geopro::app::applyDatasetCardDelegate(fileList); geopro::app::applyDatasetCardDelegate(fileList);
datasetTabs->addTab(fileList, QStringLiteral("文件")); datasetTabs->addTab(fileList, QStringLiteral("文件"));
auto* datasetDock = new ads::CDockWidget(QStringLiteral("数据真实显示栏")); auto* datasetDock = new ads::CDockWidget(QStringLiteral("数据"));
auto* datasetBox = wrapWithHeader( auto* datasetBox = wrapWithHeader(
geopro::app::Glyph::Dataset, QStringLiteral("数据真实显示栏"), datasetTabs, geopro::app::Glyph::Dataset, QStringLiteral("数据"), datasetTabs,
{{geopro::app::Glyph::Filter, QStringLiteral("筛选")}, {{geopro::app::Glyph::Filter, QStringLiteral("筛选")},
{geopro::app::Glyph::Upload, QStringLiteral("上传")}}); {geopro::app::Glyph::Upload, QStringLiteral("上传")}});
datasetDock->setWidget(datasetBox); datasetDock->setWidget(datasetBox);
@ -550,7 +557,7 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
objAttrLabel->setMargin(8); objAttrLabel->setMargin(8);
auto anomalyPanel = geopro::app::buildTabbedPanel( auto anomalyPanel = geopro::app::buildTabbedPanel(
{{geopro::app::Glyph::Anomaly, QStringLiteral("异常列表"), anomalyList, true}, {{geopro::app::Glyph::Anomaly, QStringLiteral("异常"), anomalyList, true},
{geopro::app::Glyph::Property, QStringLiteral("对象属性"), objAttrLabel, false}}, {geopro::app::Glyph::Property, QStringLiteral("对象属性"), objAttrLabel, false}},
{{geopro::app::Glyph::Filter, QStringLiteral("筛选")}, {{geopro::app::Glyph::Filter, QStringLiteral("筛选")},
{geopro::app::Glyph::Plus, QStringLiteral("添加异常")}}); {geopro::app::Glyph::Plus, QStringLiteral("添加异常")}});
@ -565,7 +572,7 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
anomalyBadge->style()->polish(anomalyBadge); anomalyBadge->style()->polish(anomalyBadge);
} }
auto* rightDock = new ads::CDockWidget(QStringLiteral("异常列表/对象属性")); auto* rightDock = new ads::CDockWidget(QStringLiteral("异常/对象属性"));
rightDock->setWidget(anomalyPanel.container); rightDock->setWidget(anomalyPanel.container);
auto* rightArea = dockManager->addDockWidget(ads::RightDockWidgetArea, rightDock); auto* rightArea = dockManager->addDockWidget(ads::RightDockWidgetArea, rightDock);
@ -574,9 +581,9 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
propLabel->setWordWrap(true); propLabel->setWordWrap(true);
propLabel->setAlignment(Qt::AlignTop | Qt::AlignLeft); propLabel->setAlignment(Qt::AlignTop | Qt::AlignLeft);
propLabel->setMargin(8); propLabel->setMargin(8);
auto* propDock = new ads::CDockWidget(QStringLiteral("属性")); auto* propDock = new ads::CDockWidget(QStringLiteral("数据集属性"));
propDock->setWidget( propDock->setWidget(
wrapWithHeader(geopro::app::Glyph::Property, QStringLiteral("属性"), propLabel)); wrapWithHeader(geopro::app::Glyph::Property, QStringLiteral("数据集属性"), propLabel));
dockManager->addDockWidget(ads::BottomDockWidgetArea, propDock, rightArea); dockManager->addDockWidget(ads::BottomDockWidgetArea, propDock, rightArea);
// 固定全部面板(对齐原型):移除 关闭/浮动/拖动/钉住 等子窗口操作,仅保留分隔条调整边界。 // 固定全部面板(对齐原型):移除 关闭/浮动/拖动/钉住 等子窗口操作,仅保留分隔条调整边界。
@ -928,7 +935,7 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
objectTree->setStructure(projectName, nodes); objectTree->setStructure(projectName, nodes);
datasetList->clear(); datasetList->clear();
fileList->clear(); fileList->clear();
if (datasetTitle) datasetTitle->setText(QStringLiteral("数据集显示栏")); if (datasetTitle) datasetTitle->setText(QStringLiteral("数据集"));
datasetTabs->setTabText(0, QStringLiteral("数据")); datasetTabs->setTabText(0, QStringLiteral("数据"));
datasetTabs->setTabText(1, QStringLiteral("文件")); datasetTabs->setTabText(1, QStringLiteral("文件"));
}); });
@ -939,7 +946,7 @@ void buildWorkbench(QMainWindow& window, geopro::data::LocalSampleRepository& re
removeLoadMore(datasetList); removeLoadMore(datasetList);
geopro::app::populateDatasetList(datasetList, rows, append); geopro::app::populateDatasetList(datasetList, rows, append);
const int loaded = addLoadMore(datasetList, total); const int loaded = addLoadMore(datasetList, total);
if (datasetTitle) datasetTitle->setText(QStringLiteral("数据集显示栏")); if (datasetTitle) datasetTitle->setText(QStringLiteral("数据集"));
datasetTabs->setTabText( datasetTabs->setTabText(
0, total > 0 ? QStringLiteral("数据 (%1/%2)").arg(loaded).arg(total) 0, total > 0 ? QStringLiteral("数据 (%1/%2)").arg(loaded).arg(total)
: QStringLiteral("数据")); : QStringLiteral("数据"));