diff --git a/src/ui/DockWidget.cpp b/src/ui/DockWidget.cpp index 6e121252..3f3714cc 100644 --- a/src/ui/DockWidget.cpp +++ b/src/ui/DockWidget.cpp @@ -4,6 +4,7 @@ #include #include "ui/Menu/SystemManagerMenu.h" +#include "ui/Menu/WindowManagerMenu.h" #include "common/SpdLogger.h" #include "ui/MainFrame.h" @@ -24,6 +25,10 @@ DockWidget::DockWidget(const QString& title, QWidget* parent) if (nullptr != windowManagerMenu) { windowManagerMenu->AddDockWidget(this); } + // 同步到可视的 WindowManagerMenu 列表(如果存在) + if (auto* listMenu = MainFrame::Get().GetMenuManager("window_manager")) { + listMenu->AddDockWidget(this); + } m_bMax = false; //setStyleSheet(QString("border: 1px solid #A2C2DB;")); @@ -35,6 +40,10 @@ DockWidget::DockWidget(QWidget* parent) SystemManagerMenu* windowManagerMenu = MainFrame::Get().GetMenuManager("system_manager"); if (nullptr != windowManagerMenu) { windowManagerMenu->AddDockWidget(this); + } + // 同步到可视的 WindowManagerMenu 列表(如果存在) + if (auto* listMenu = MainFrame::Get().GetMenuManager("window_manager")) { + listMenu->AddDockWidget(this); } m_bMax = false; } diff --git a/src/ui/Menu/SystemManagerMenu.cpp b/src/ui/Menu/SystemManagerMenu.cpp index dce603a7..aaa77573 100644 --- a/src/ui/Menu/SystemManagerMenu.cpp +++ b/src/ui/Menu/SystemManagerMenu.cpp @@ -31,11 +31,18 @@ void SystemManagerMenu::AddDockWidget(class DockWidget* dockWidget) { } ); action->setCheckable(true); - action->setChecked(!dockWidget->isVisible()); + // 勾选状态应与可见状态一致 + action->setChecked(dockWidget->isVisible()); + // 绑定 dock 到 action,便于打开菜单时同步状态 + action->setData(QVariant::fromValue(dockWidget)); connect(action, &QAction::triggered, [dockWidget, action]() { dockWidget->setVisible(action->isChecked()); } ); + // 同步可见性变化到勾选状态 + connect(dockWidget, &DockWidget::visibilityChanged, [action](bool visible) { + action->setChecked(visible); + }); connect(dockWidget, &DockWidget::signalClose, [action]() { action->setChecked(false); }); @@ -64,7 +71,17 @@ void SystemManagerMenu::OnExit() { } void SystemManagerMenu::OnWindowManagerMenu() { - // Ӵڹ˵ + // ���Ӵ��ڹ����˵� LOG_INFO("add window manager menu"); + // 打开菜单前,同步所有条目的勾选状态与当前 dock 可见性 + for (QAction* act : windowManagerMenu_->actions()) { + QVariant v = act->data(); + if (v.isValid()) { + DockWidget* dock = v.value(); + if (dock) { + act->setChecked(dock->isVisible()); + } + } + } windowManagerMenu_->exec(QCursor::pos()); } diff --git a/src/ui/Menu/WindowManagerMenu.cpp b/src/ui/Menu/WindowManagerMenu.cpp index bc7793ef..73ea2617 100644 --- a/src/ui/Menu/WindowManagerMenu.cpp +++ b/src/ui/Menu/WindowManagerMenu.cpp @@ -33,14 +33,18 @@ void WindowManagerMenu::AddDockWidget(DockWidget* dockWidget) { item->setText(title); } ); - - item->setCheckState(Qt::Checked); + // 初始勾选状态与 dock 的可见性同步 + item->setCheckState(dockWidget->isVisible() ? Qt::Checked : Qt::Unchecked); connect(ui->listWidget, &QListWidget::itemClicked, [](QListWidgetItem* item) { bool checked = !(item->checkState() == Qt::Checked); item->setCheckState(checked ? Qt::Checked : Qt::Unchecked); item->data(DockWidgetRole).value()->setVisible(checked); }); item->setData(DockWidgetRole, QVariant::fromValue(dockWidget)); + // 同步 dock 可见性变化到勾选状态 + connect(dockWidget, &DockWidget::visibilityChanged, [item](bool visible) { + item->setCheckState(visible ? Qt::Checked : Qt::Unchecked); + }); connect(dockWidget, &DockWidget::signalClose, [this, item]() { item->setCheckState(Qt::Unchecked); }); diff --git a/src/ui/Panel/DataPanelManager.cpp b/src/ui/Panel/DataPanelManager.cpp index 683beabf..aa85f770 100644 --- a/src/ui/Panel/DataPanelManager.cpp +++ b/src/ui/Panel/DataPanelManager.cpp @@ -70,7 +70,8 @@ void DataPanelManager::SetWorkspace(WorkSpace* workspace) LOG_INFO("DataPanelManager::SetWorkspace - Reapplying UI layout after panels created"); UiLayoutManager::Restore(mainWindow_, 1); } else { - ClearAllPanels(); + // 需求变更:如果当前工作空间不存在,继续显示现有面板,不清空 + LOG_INFO("DataPanelManager::SetWorkspace - No workspace; keeping existing panels displayed"); } }