From 6a371c9fa9320a410f701df7cf97de81265ade94 Mon Sep 17 00:00:00 2001 From: gaozheng Date: Thu, 25 Jun 2026 16:55:15 +0800 Subject: [PATCH] =?UTF-8?q?fix(ui):=20=E7=AD=9B=E9=80=89=E8=A1=8C+?= =?UTF-8?q?=E5=88=86=E6=9E=90tab=E6=BB=9A=E5=8A=A8=E9=87=8D=E6=9E=84(?= =?UTF-8?q?=E6=89=B93/#3#7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - #3 时间筛选下拉:QToolButton 套与 QComboBox 一致的 box(同高/边框/圆角/padding)+右侧统一 SVG chevron(:/icons/chevron-down.svg),去掉手写粗糙的「▾」字符;修高度比装置下拉矮 - #7 分析tab滚动:各段在 tab 内 stretch=1(内容都少时四段平分高度填满、与VTK区等高不出滚动条); 段体 list 关内层纵/横滚动条 + 最小高度=可见项内容总高(有副标题52/否则30,同delegate sizeHint), 内容多则整段拉长、超视口由外层 QScrollArea 统一出单滚动条;去掉末尾 addStretch 构建:app 链接通过 --- src/app/panels/columns/CategoryAnalysisTab.cpp | 5 +++-- src/app/panels/columns/CategorySection.cpp | 10 ++++++++++ src/app/panels/columns/DateRangeEdit.cpp | 14 ++++++++++++-- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/app/panels/columns/CategoryAnalysisTab.cpp b/src/app/panels/columns/CategoryAnalysisTab.cpp index aae0e37..1b52992 100644 --- a/src/app/panels/columns/CategoryAnalysisTab.cpp +++ b/src/app/panels/columns/CategoryAnalysisTab.cpp @@ -49,9 +49,10 @@ CategoryAnalysisTab::CategoryAnalysisTab(geopro::data::DatasetFieldDictionary* d &CategoryAnalysisTab::sliceExportDatRequested); connect(sec, &CategorySection::anomalyVisibilityChanged, this, &CategoryAnalysisTab::anomalyVisibilityChanged); - col->addWidget(sec); + // #7:各段等分 stretch → 内容都少时四段平分高度填满面板(初始与 VTK 区等高、不出滚动条); + // 某段内容增多时其最小高度(=内容总高)撑大,超出视口则由外层 QScrollArea 统一出纵向滚动条。 + col->addWidget(sec, 1); } - col->addStretch(1); scroll->setWidget(content); } diff --git a/src/app/panels/columns/CategorySection.cpp b/src/app/panels/columns/CategorySection.cpp index b4fb383..7ca6a0b 100644 --- a/src/app/panels/columns/CategorySection.cpp +++ b/src/app/panels/columns/CategorySection.cpp @@ -82,6 +82,9 @@ CategorySection::CategorySection(const CategorySpec& spec, geopro::data::Dataset list_->setHeaderHidden(true); list_->setRootIsDecorated(true); list_->setIndentation(14); // 紧凑父子缩进(默认 20 太宽) + // #7:段体不出内层滚动条——内容超出时整段拉长,由 CategoryAnalysisTab 外层 QScrollArea 统一滚动。 + list_->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + list_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); applyDatasetCardDelegate(list_); connect(list_, &QTreeWidget::itemChanged, this, [this](QTreeWidgetItem*, int) { emitChecked(); }); connect(list_, &QTreeWidget::itemDoubleClicked, this, [this](QTreeWidgetItem* it, int) { @@ -220,6 +223,13 @@ void CategorySection::rebuildList() { } } list_->expandAll(); // 展开容器层级(项目根/GS/TM),让体/切片/异常可见 + // #7:段体无内层滚动条 → list 最小高度 = 可见项内容总高(与 DatasetCardDelegate::sizeHint 一致: + // 有副标题 52,否则 30)。内容多则撑大本段、超视口由外层滚动;内容少则被 stretch 拉到平分高度。 + int contentH = 2 * list_->frameWidth() + 4; + for (QTreeWidgetItemIterator hit(list_); *hit; ++hit) + if (!(*hit)->isHidden()) + contentH += (*hit)->text(0).contains(QLatin1Char('\n')) ? 52 : 30; + list_->setMinimumHeight(contentH); emitChecked(); // 重建后必为空选,清掉上次渲染勾选 } diff --git a/src/app/panels/columns/DateRangeEdit.cpp b/src/app/panels/columns/DateRangeEdit.cpp index 0a8e927..a1acdd5 100644 --- a/src/app/panels/columns/DateRangeEdit.cpp +++ b/src/app/panels/columns/DateRangeEdit.cpp @@ -21,6 +21,16 @@ DateRangeEdit::DateRangeEdit(QWidget* parent) : QWidget(parent) { btn_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); btn_->setPopupMode(QToolButton::InstantPopup); btn_->setToolTip(QStringLiteral("按采集时间筛选(起 ~ 止),可清空")); + // 外观与 QComboBox 完全一致(同高/同边框/同圆角/同内距)+ 右侧统一 SVG chevron(替代手写 ▾, + // 原 ▾ 字符渲染粗糙且按钮比装置下拉矮)。右侧留 24px 放 chevron,文本左对齐。 + applyTokenizedStyleSheet( + btn_, QStringLiteral( + "QToolButton{background-color:{{bg/panel}};color:{{text/primary}};" + "border:1px solid {{border/default}};border-radius:4px;" + "padding:6px 24px 6px 8px;min-height:16px;text-align:left;" + "background-image:url(:/icons/chevron-down.svg);background-repeat:no-repeat;" + "background-position:right 8px center;}" + "QToolButton:hover{border-color:{{border/strong}};}")); connect(btn_, &QToolButton::clicked, this, &DateRangeEdit::openPopup); lay->addWidget(btn_); updateText(); @@ -86,12 +96,12 @@ void DateRangeEdit::clearAndClose() { void DateRangeEdit::updateText() { if (!from_.isValid() && !to_.isValid()) { - btn_->setText(QStringLiteral("全部时间 ▾")); + btn_->setText(QStringLiteral("全部时间")); // chevron 由 QSS background-image 绘制 return; } const QString f = from_.isValid() ? from_.toString(QStringLiteral("yyyy-MM-dd")) : QStringLiteral("不限"); const QString t = to_.isValid() ? to_.toString(QStringLiteral("yyyy-MM-dd")) : QStringLiteral("不限"); - btn_->setText(QStringLiteral("%1 ~ %2 ▾").arg(f, t)); + btn_->setText(QStringLiteral("%1 ~ %2").arg(f, t)); } } // namespace geopro::app