#include "ui/Menu/WindowManagerMenu.h" #include #include "ui/MainFrame.h" #include "ui/DockWidget.h" #include "common/SpdLogger.h" #include "ui_WindowManagerMenu.h" const int DockWidgetRole = Qt::UserRole + 1; WindowManagerMenu::WindowManagerMenu(QWidget* parent) : QWidget(parent) , ui(new Ui::WindowManagerMenu) { ui->setupUi(this); } WindowManagerMenu::~WindowManagerMenu() { delete ui; } void WindowManagerMenu::AddDockWidget(DockWidget* dockWidget) { if (nullptr == dockWidget) { LOG_ERROR("dockWidget is nullptr"); return; } QListWidgetItem* item = new QListWidgetItem(dockWidget->windowTitle()); connect(dockWidget, &DockWidget::windowTitleChanged, [item](const QString& title) { item->setText(title); } ); // 初始勾选状态与 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); }); ui->listWidget->addItem(item); } void WindowManagerMenu::RemoveDockWidget(class DockWidget* dockWidget) { }