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() {