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