fix(ui): #1 两 tab 平分抽屉宽度,消除旧3栏遗留的右侧空白第三栏位

旧布局 3 栏(三维数据集/二维数据集/三维分析)三分横向空间;重构成 2 tab 后全局 QSS 让 tab 取
内容宽度左对齐,宽抽屉右侧留出约一栏空白(用户感知为"空着的第三栏位")。带样式表的 tab 不响应
setExpanding,故在 ColumnDrawer::resizeEvent 按 barWidth/n 给每个 tab 显式宽度,两 tab 平分填满。

构建:app 链接通过
This commit is contained in:
gaozheng 2026-06-25 17:41:55 +08:00
parent a6cdd2ff80
commit 961af652d7
2 changed files with 22 additions and 0 deletions

View File

@ -1,10 +1,14 @@
#include "panels/columns/ColumnDrawer.hpp" #include "panels/columns/ColumnDrawer.hpp"
#include "panels/columns/Column2DDataset.hpp" #include "panels/columns/Column2DDataset.hpp"
#include "panels/columns/CategoryAnalysisTab.hpp" #include "panels/columns/CategoryAnalysisTab.hpp"
#include <algorithm>
#include "Glyphs.hpp" #include "Glyphs.hpp"
#include "Theme.hpp" #include "Theme.hpp"
#include <QHBoxLayout> #include <QHBoxLayout>
#include <QPushButton> #include <QPushButton>
#include <QResizeEvent>
#include <QTabBar>
#include <QTabWidget> #include <QTabWidget>
namespace geopro::app { namespace geopro::app {
@ -49,6 +53,20 @@ ColumnDrawer::ColumnDrawer(QWidget* parent, geopro::data::DatasetFieldDictionary
setMaximumWidth(560); setMaximumWidth(560);
} }
void ColumnDrawer::resizeEvent(QResizeEvent* e)
{
QWidget::resizeEvent(e);
// 两 tab 平分抽屉宽度填满(带样式表的 tab 不响应 setExpanding须按 barWidth/n 显式给宽)。
// 消除旧 3 栏布局遗留的右侧空白——重构成 2 栏后不再三分、留空第三位。
if (auto* tabs = qobject_cast<QTabWidget*>(body_)) {
const int n = tabs->count();
if (n > 0 && tabs->width() > 0) {
const int w = std::max(40, tabs->width() / n - 6); // 减 margin-right(4)余量
tabs->tabBar()->setStyleSheet(QStringLiteral("QTabBar::tab{width:%1px;}").arg(w));
}
}
}
void ColumnDrawer::toggleCollapsed() void ColumnDrawer::toggleCollapsed()
{ {
collapsed_ = !collapsed_; collapsed_ = !collapsed_;

View File

@ -2,6 +2,7 @@
#include <QWidget> #include <QWidget>
class QPushButton; class QPushButton;
class QResizeEvent;
namespace geopro::data { namespace geopro::data {
class DatasetFieldDictionary; class DatasetFieldDictionary;
@ -26,6 +27,9 @@ public slots:
void toggleCollapsed(); void toggleCollapsed();
void expand(); // 强制展开(进入全屏时确保三栏可见) void expand(); // 强制展开(进入全屏时确保三栏可见)
protected:
void resizeEvent(QResizeEvent* e) override; // 两 tab 按抽屉宽平分(消除右侧空白"第三栏位"
private: private:
Column2DDataset* col2D_ = nullptr; Column2DDataset* col2D_ = nullptr;
CategoryAnalysisTab* analysisTab_ = nullptr; CategoryAnalysisTab* analysisTab_ = nullptr;