From d6e52cb51f233ee2c41201fe251feed0c6f3f56d Mon Sep 17 00:00:00 2001 From: gaozheng Date: Fri, 26 Jun 2026 07:29:32 +0800 Subject: [PATCH] =?UTF-8?q?fix(ui):=20=E4=B8=89=E7=BB=B4=E5=88=86=E6=9E=90?= =?UTF-8?q?=E5=88=86=E6=AE=B5=E9=9D=A2=E6=9D=BF=E8=A7=86=E8=A7=89=E6=89=93?= =?UTF-8?q?=E7=A3=A8(=E6=AE=B5=E5=A4=B4/=E6=96=B0=E5=A2=9E=E6=8C=89?= =?UTF-8?q?=E9=92=AE/=E9=A1=B6=E9=83=A8=E7=95=99=E7=99=BD,=E8=A7=84?= =?UTF-8?q?=E8=8C=83=C2=A74.3/=C2=A76.7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 用户反馈分段面板难看,逐项重做: - 可折叠段头:去原生小三角(难看)→chevron 文本前缀 ▾/▸(随主题/hover 变色);标题改 title 字号 +半粗(原默认字体);加浅底分段条 bg/panel-subtle + 底分隔线 divider 作视觉分段;hover 转 accent - 「+新增三维体」:裸 autoRaise 文字 → 描边强调按钮(border/文字 accent/primary,hover 浅强调底, radius/sm,caption 字号),符合§6.7 次级强调按钮 - 顶部留白:CategoryAnalysisTab 内容区加 top margin → 首段段头不再贴顶 - 筛选行 setSpacing 一致化 构建:app 链接通过 --- .../panels/columns/CategoryAnalysisTab.cpp | 2 +- src/app/panels/columns/CategorySection.cpp | 45 +++++++++++++++---- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/src/app/panels/columns/CategoryAnalysisTab.cpp b/src/app/panels/columns/CategoryAnalysisTab.cpp index 4e7c0ee..d110e4b 100644 --- a/src/app/panels/columns/CategoryAnalysisTab.cpp +++ b/src/app/panels/columns/CategoryAnalysisTab.cpp @@ -22,7 +22,7 @@ CategoryAnalysisTab::CategoryAnalysisTab(geopro::data::DatasetFieldDictionary* d auto* content = new QWidget(scroll); auto* col = new QVBoxLayout(content); - col->setContentsMargins(0, 0, 0, 0); + col->setContentsMargins(0, space::kSm, 0, space::kSm); // 顶部留白:首段段头不贴顶 col->setSpacing(space::kSm); for (const CategorySpec& spec : categoryConfigs()) { diff --git a/src/app/panels/columns/CategorySection.cpp b/src/app/panels/columns/CategorySection.cpp index 732bee0..a7efac1 100644 --- a/src/app/panels/columns/CategorySection.cpp +++ b/src/app/panels/columns/CategorySection.cpp @@ -33,24 +33,50 @@ CategorySection::CategorySection(const CategorySpec& spec, geopro::data::Dataset root->setContentsMargins(0, 0, 0, 0); root->setSpacing(0); - // 数据类型标题行(spec §7):折叠箭头+标题(左) | 「+新增三维体」(右,仅反演类,在标题行而非筛选行)。 + // 数据类型段头(可折叠,规范§4.3/§6):chevron + 标题(title 字号·半粗) |「+ 新增三维体」(右,仅反演类)。 + // 段头加浅底 + 底分隔线作视觉分段;去原生小三角(难看)→chevron 文本前缀,随主题/hover 变色。 auto* headerRow = new QWidget(this); + headerRow->setObjectName(QStringLiteral("secHeader")); + applyTokenizedStyleSheet(headerRow, + QStringLiteral("QWidget#secHeader{background:{{bg/panel-subtle}};" + "border-bottom:1px solid {{divider}};}")); auto* hl = new QHBoxLayout(headerRow); - hl->setContentsMargins(space::kSm, 0, space::kSm, 0); + hl->setContentsMargins(space::kMd, space::kSm, space::kSm, space::kSm); hl->setSpacing(space::kSm); header_ = new QToolButton(headerRow); - header_->setText(QString::fromStdString(spec_.title)); header_->setCheckable(true); header_->setChecked(true); - header_->setToolButtonStyle(Qt::ToolButtonTextBesideIcon); - header_->setArrowType(Qt::DownArrow); - header_->setAutoRaise(true); + header_->setArrowType(Qt::NoArrow); + header_->setToolButtonStyle(Qt::ToolButtonTextOnly); + header_->setCursor(Qt::PointingHandCursor); + applyTokenizedStyleSheet( + header_, QStringLiteral("QToolButton{border:none;background:transparent;padding:0;" + "font-size:%1px;font-weight:%2;color:{{text/primary}};}" + "QToolButton:hover{color:{{accent/primary}};}") + .arg(scaledPx(type::kTitle)) + .arg(type::kWeightSemibold)); + auto syncHeader = [this] { + header_->setText((header_->isChecked() ? QStringLiteral("▾ ") : QStringLiteral("▸ ")) + + QString::fromStdString(spec_.title)); + }; + syncHeader(); hl->addWidget(header_); hl->addStretch(1); if (spec_.canGenerateVolume) { auto* gen = new QToolButton(headerRow); gen->setText(QStringLiteral("+ 新增三维体")); - gen->setAutoRaise(true); + gen->setCursor(Qt::PointingHandCursor); + // 次级强调按钮(规范§6.7):描边 accent + accent 文字,hover 浅强调底;非裸文字。 + applyTokenizedStyleSheet( + gen, QStringLiteral( + "QToolButton{border:1px solid {{accent/primary}};border-radius:%1px;" + "color:{{accent/primary}};background:transparent;padding:%2px %3px;font-size:%4px;}" + "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))); connect(gen, &QToolButton::clicked, this, [this] { emit generateVolumeRequested(QString::fromStdString(spec_.dsTypeCode), checkedDsIds()); }); @@ -65,6 +91,7 @@ CategorySection::CategorySection(const CategorySpec& spec, geopro::data::Dataset // 筛选行:采集时间范围(在前)+ 装置类型(在后,仅 ERT 类)。 auto* filterRow = new QHBoxLayout(); + filterRow->setSpacing(space::kSm); dateRange_ = new DateRangeEdit(body_); connect(dateRange_, &DateRangeEdit::rangeChanged, this, [this] { rebuildList(); }); filterRow->addWidget(dateRange_, 1); @@ -115,9 +142,9 @@ CategorySection::CategorySection(const CategorySpec& spec, geopro::data::Dataset root->addWidget(body_, 1); - connect(header_, &QToolButton::toggled, this, [this](bool on) { + connect(header_, &QToolButton::toggled, this, [this, syncHeader](bool on) { body_->setVisible(on); - header_->setArrowType(on ? Qt::DownArrow : Qt::RightArrow); + syncHeader(); // ▾(展开)/▸(折叠) 切换 }); }