#include "GUIDialogManager.h" #include "GUIDialogBase.h" namespace GUI { // GUIDialogManager的单例实例初始化为nullptr GUIDialogManager *GUIDialogManager::_instance = nullptr; // 当对话框创建时调用此函数,将其添加到管理列表中 void GUIDialogManager::dialogCreated(GUIDialogBase *dlg, QString uniqueFlag) { if (_dialogList.contains(dlg)) return; _dialogList.append(dlg); if (uniqueFlag.isEmpty()) return; if (!_dialogHash.contains(uniqueFlag)) { _dialogHash.insert(uniqueFlag, nullptr); } auto dialog = _dialogHash.value(uniqueFlag, nullptr); if (dialog != nullptr) { dialog->setAttribute(Qt::WA_DeleteOnClose, false); dialog->close(); delete dialog; dialog = nullptr; } _dialogHash[uniqueFlag] = dlg; } // 当对话框销毁时调用此函数,将其从管理列表中移除 void GUIDialogManager::dialogDestoried(GUIDialogBase *dlg) { if (!_dialogList.contains(dlg)) return; _dialogList.removeOne(dlg); // 删除对话框的时候将hash中的value设置nullptr auto it = _dialogHash.constBegin(); while (it != _dialogHash.constEnd()) { if (it.value() == dlg) { _dialogHash[it.key()] = nullptr; } ++it; } } // 获取当前所有存活的对话框列表 QList GUIDialogManager::getAllDialogs() { return _dialogList; } } // namespace GUI