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(); // ▾(展开)/▸(折叠) 切换 }); }