fix(ui): 筛选行+分析tab滚动重构(批3/#3#7)
- #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 链接通过
This commit is contained in:
parent
b497fe547c
commit
6a371c9fa9
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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(); // 重建后必为空选,清掉上次渲染勾选
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue