From 088dd91e27c367e409cae1d2c492ed4bfbb56280 Mon Sep 17 00:00:00 2001 From: DingVero Date: Wed, 8 Apr 2026 10:01:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=A4=A7=E5=8F=B3=E8=BE=B9dock?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=AE=BD=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/gui/main_window/MainWindow.cpp | 34 +++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/client/gui/main_window/MainWindow.cpp b/client/gui/main_window/MainWindow.cpp index 6f678a9..d2dc2e4 100644 --- a/client/gui/main_window/MainWindow.cpp +++ b/client/gui/main_window/MainWindow.cpp @@ -68,6 +68,13 @@ namespace { constexpr int kRightDockMinimumWidth = 80; /// 列宽小于此值时自动隐藏右侧两 dock constexpr int kRightDockAutoHideBelow = 92; +/// 右侧 dock 列最大宽度,避免过宽挤占画布 +constexpr int kRightDockMaximumWidth = 288; +/// 属性区表单内容最大宽度(dock 仍可略宽,两侧留白,避免 SpinBox 被拉得过开) +constexpr int kPropertyPanelContentMaxWidth = 268; +/// 启动时垂直分割高度:项目树较矮、属性区较高 +constexpr int kProjectTreeDockStartupHeight = 148; +constexpr int kPropertiesDockStartupHeight = 392; void polishCompactToolButton(QToolButton* b, int px = 40) { if (!b) return; @@ -947,12 +954,13 @@ void MainWindow::createProjectTreeDock() { Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea); m_dockProperties->setFeatures(QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable | QDockWidget::DockWidgetClosable); - m_dockProperties->setMinimumWidth(kRightDockMinimumWidth); + m_dockProperties->setMinimumWidth(236); m_bgPropertySection = new gui::BackgroundPropertySection(); m_entityPropertySection = new gui::EntityPropertySection(); m_propertyStack = new QStackedWidget(); m_propertyStack->setContentsMargins(4, 4, 4, 4); + m_propertyStack->setMaximumWidth(kPropertyPanelContentMaxWidth); m_propertyStack->addWidget(m_bgPropertySection); m_propertyStack->addWidget(m_entityPropertySection); @@ -1048,7 +1056,9 @@ void MainWindow::createProjectTreeDock() { addDockWidget(Qt::RightDockWidgetArea, m_dockProjectTree); splitDockWidget(m_dockProjectTree, m_dockProperties, Qt::Vertical); - resizeDocks({m_dockProjectTree, m_dockProperties}, {220, 200}, Qt::Vertical); + resizeDocks({m_dockProjectTree, m_dockProperties}, + {kProjectTreeDockStartupHeight, kPropertiesDockStartupHeight}, + Qt::Vertical); connect(m_dockProjectTree, &QDockWidget::visibilityChanged, this, [this](bool visible) { if (m_actionToggleProjectTree) { @@ -1064,6 +1074,26 @@ void MainWindow::createProjectTreeDock() { m_actionToggleProperties->blockSignals(false); } }); + + // 停靠时限制右侧列最大宽度;浮动时解除,避免属性/项目树窗口过窄难用 + const auto applyRightDockColumnMaxWidth = [](QDockWidget* dock) { + if (!dock) { + return; + } + dock->setMaximumWidth(dock->isFloating() ? QWIDGETSIZE_MAX : kRightDockMaximumWidth); + }; + applyRightDockColumnMaxWidth(m_dockProjectTree); + applyRightDockColumnMaxWidth(m_dockProperties); + connect(m_dockProjectTree, &QDockWidget::topLevelChanged, this, + [applyRightDockColumnMaxWidth, this](bool) { + applyRightDockColumnMaxWidth(m_dockProjectTree); + applyRightDockColumnMaxWidth(m_dockProperties); + }); + connect(m_dockProperties, &QDockWidget::topLevelChanged, this, + [applyRightDockColumnMaxWidth, this](bool) { + applyRightDockColumnMaxWidth(m_dockProjectTree); + applyRightDockColumnMaxWidth(m_dockProperties); + }); } void MainWindow::refreshPropertyPanel() {