feat/vtk-3d-view #7
|
|
@ -49,9 +49,10 @@ CategoryAnalysisTab::CategoryAnalysisTab(geopro::data::DatasetFieldDictionary* d
|
||||||
&CategoryAnalysisTab::sliceExportDatRequested);
|
&CategoryAnalysisTab::sliceExportDatRequested);
|
||||||
connect(sec, &CategorySection::anomalyVisibilityChanged, this,
|
connect(sec, &CategorySection::anomalyVisibilityChanged, this,
|
||||||
&CategoryAnalysisTab::anomalyVisibilityChanged);
|
&CategoryAnalysisTab::anomalyVisibilityChanged);
|
||||||
col->addWidget(sec);
|
// #7:各段等分 stretch → 内容都少时四段平分高度填满面板(初始与 VTK 区等高、不出滚动条);
|
||||||
|
// 某段内容增多时其最小高度(=内容总高)撑大,超出视口则由外层 QScrollArea 统一出纵向滚动条。
|
||||||
|
col->addWidget(sec, 1);
|
||||||
}
|
}
|
||||||
col->addStretch(1);
|
|
||||||
scroll->setWidget(content);
|
scroll->setWidget(content);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,9 @@ CategorySection::CategorySection(const CategorySpec& spec, geopro::data::Dataset
|
||||||
list_->setHeaderHidden(true);
|
list_->setHeaderHidden(true);
|
||||||
list_->setRootIsDecorated(true);
|
list_->setRootIsDecorated(true);
|
||||||
list_->setIndentation(14); // 紧凑父子缩进(默认 20 太宽)
|
list_->setIndentation(14); // 紧凑父子缩进(默认 20 太宽)
|
||||||
|
// #7:段体不出内层滚动条——内容超出时整段拉长,由 CategoryAnalysisTab 外层 QScrollArea 统一滚动。
|
||||||
|
list_->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
|
list_->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||||
applyDatasetCardDelegate(list_);
|
applyDatasetCardDelegate(list_);
|
||||||
connect(list_, &QTreeWidget::itemChanged, this, [this](QTreeWidgetItem*, int) { emitChecked(); });
|
connect(list_, &QTreeWidget::itemChanged, this, [this](QTreeWidgetItem*, int) { emitChecked(); });
|
||||||
connect(list_, &QTreeWidget::itemDoubleClicked, this, [this](QTreeWidgetItem* it, int) {
|
connect(list_, &QTreeWidget::itemDoubleClicked, this, [this](QTreeWidgetItem* it, int) {
|
||||||
|
|
@ -220,6 +223,13 @@ void CategorySection::rebuildList() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
list_->expandAll(); // 展开容器层级(项目根/GS/TM),让体/切片/异常可见
|
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(); // 重建后必为空选,清掉上次渲染勾选
|
emitChecked(); // 重建后必为空选,清掉上次渲染勾选
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,16 @@ DateRangeEdit::DateRangeEdit(QWidget* parent) : QWidget(parent) {
|
||||||
btn_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
btn_->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
|
||||||
btn_->setPopupMode(QToolButton::InstantPopup);
|
btn_->setPopupMode(QToolButton::InstantPopup);
|
||||||
btn_->setToolTip(QStringLiteral("按采集时间筛选(起 ~ 止),可清空"));
|
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);
|
connect(btn_, &QToolButton::clicked, this, &DateRangeEdit::openPopup);
|
||||||
lay->addWidget(btn_);
|
lay->addWidget(btn_);
|
||||||
updateText();
|
updateText();
|
||||||
|
|
@ -86,12 +96,12 @@ void DateRangeEdit::clearAndClose() {
|
||||||
|
|
||||||
void DateRangeEdit::updateText() {
|
void DateRangeEdit::updateText() {
|
||||||
if (!from_.isValid() && !to_.isValid()) {
|
if (!from_.isValid() && !to_.isValid()) {
|
||||||
btn_->setText(QStringLiteral("全部时间 ▾"));
|
btn_->setText(QStringLiteral("全部时间")); // chevron 由 QSS background-image 绘制
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const QString f = from_.isValid() ? from_.toString(QStringLiteral("yyyy-MM-dd")) : QStringLiteral("不限");
|
const QString f = from_.isValid() ? from_.toString(QStringLiteral("yyyy-MM-dd")) : QStringLiteral("不限");
|
||||||
const QString t = to_.isValid() ? to_.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
|
} // namespace geopro::app
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue