#include "SystemManagerMenu.h" #include #include "common/SpdLogger.h" #include "ui/MainFrame.h" #include "ui/DockWidget.h" #include "ui_SystemManagerMenu.h" SystemManagerMenu::SystemManagerMenu(QWidget* parent) : QWidget(parent) , ui(new Ui::SystemManagerMenu) { ui->setupUi(this); InitConnect(); LOG_INFO("SystemManagerMenu init"); windowManagerMenu_ = new QMenu(this); windowManagerMenu_->setWindowFlags(windowManagerMenu_->windowFlags() | Qt::FramelessWindowHint); ui->menu_uisetting->setVisible(false); } SystemManagerMenu::~SystemManagerMenu() { delete ui; } void SystemManagerMenu::AddDockWidget(class DockWidget* dockWidget) { QAction* action = new QAction(dockWidget->windowTitle(), this); connect(dockWidget, &DockWidget::windowTitleChanged, [action](const QString& title) { action->setText(title); } ); action->setCheckable(true); // 勾选状态应与可见状态一致 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); }); windowManagerMenu_->addAction(action); } void SystemManagerMenu::RemoveDockWidget(class DockWidget* dockWidget) { } void SystemManagerMenu::InitConnect() { connect(ui->menu_exit, &QToolButton::clicked, this, &SystemManagerMenu::OnExit); //ui->menu_window_manager->setContextMenuPolicy(Qt::CustomContextMenu); connect(ui->menu_window_manager, &QToolButton::clicked, this, &SystemManagerMenu::OnWindowManagerMenu); connect(ui->menu_uisetting, &QToolButton::clicked, this, &SystemManagerMenu::signalShowUISetting); } void SystemManagerMenu::OnExit() { int ret = QMessageBox::question(&MainFrame::Get(), tr("question"), tr("are you sure to exit"), QMessageBox::Ok | QMessageBox::No); if (QMessageBox::Ok == ret) { LOG_INFO("user exit"); qApp->quit(); } } 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()); }