diff --git a/common/include/titleBar.h b/common/include/titleBar.h index 3bb35d4..472ea83 100644 --- a/common/include/titleBar.h +++ b/common/include/titleBar.h @@ -30,6 +30,7 @@ protected: void mouseMoveEvent(QMouseEvent *event) override; void mouseDoubleClickEvent(QMouseEvent *event) override; + bool eventFilter(QObject *watched, QEvent *event) override; private: void setupUI(); diff --git a/common/source/titleBar.cpp b/common/source/titleBar.cpp index 4db41ab..2d92d6f 100644 --- a/common/source/titleBar.cpp +++ b/common/source/titleBar.cpp @@ -41,6 +41,10 @@ TitleBar::TitleBar(QWidget *parent,bool bClose,bool bMaxMin) )"; setStyleSheet(style); + + if (m_parentWindow) { + m_parentWindow->installEventFilter(this); + } } void TitleBar::setupUI() @@ -138,3 +142,29 @@ void TitleBar::mouseDoubleClickEvent(QMouseEvent *event) emit maximizeClicked(); } } + +bool TitleBar::eventFilter(QObject *watched, QEvent *event) +{ + if (watched == m_parentWindow && event->type() == QEvent::Show) { + + // 防止最大化/全屏时干扰 + if (m_parentWindow->isMaximized() || + m_parentWindow->isFullScreen()) { + return false; + } + + QScreen *screen = QGuiApplication::primaryScreen(); + if (!screen) + return false; + + QRect screenRect = screen->availableGeometry(); + QRect windowRect = m_parentWindow->geometry(); // ✅ 正确 + + int x = screenRect.x() + (screenRect.width() - windowRect.width()) / 2; + int y = screenRect.y() + (screenRect.height() - windowRect.height()) / 2; + + m_parentWindow->move(x, y); + } + + return QWidget::eventFilter(watched, event); +} diff --git a/diagramCavas/source/diagramCavas.cpp b/diagramCavas/source/diagramCavas.cpp index cc21303..b707e0e 100644 --- a/diagramCavas/source/diagramCavas.cpp +++ b/diagramCavas/source/diagramCavas.cpp @@ -41,6 +41,7 @@ DiagramCavas::DiagramCavas(QWidget *parent) ,_extraPropertyManager(nullptr) { _pageIndex = 0; + setViewMode(QMdiArea::TabbedView); } DiagramCavas::~DiagramCavas() diff --git a/include/createEditor.h b/include/createEditor.h index 293d83a..b2cba38 100644 --- a/include/createEditor.h +++ b/include/createEditor.h @@ -8,23 +8,26 @@ namespace Ui { class createEditor; } QT_END_NAMESPACE class TitleBar; +class DiagramView; class CreateEditor : public QDialog { Q_OBJECT public: - CreateEditor(QWidget *parent = nullptr); + CreateEditor(QWidget *parent = nullptr,DiagramView* p = nullptr); ~CreateEditor(); void initial(); void showDlg(); - +signals: + void projectCreated(); public slots: void onOkClicked(); void onCancelClicked(); private: Ui::createEditor *ui; TitleBar* m_titleBar; + DiagramView* m_pView; }; #endif diff --git a/include/diagramView.h b/include/diagramView.h index 6e22d6a..1d022f9 100644 --- a/include/diagramView.h +++ b/include/diagramView.h @@ -22,6 +22,8 @@ public: void initial(); void loadTopologyFromDB(); //加载拓扑关系 + void clearProjectTree(); + bool projectExist(); //判断工程存在 signals: void diagramCreate(DiagramInfo); void diagramChange(DiagramInfo); diff --git a/source/createEditor.cpp b/source/createEditor.cpp index 30f6af0..b99b012 100644 --- a/source/createEditor.cpp +++ b/source/createEditor.cpp @@ -4,12 +4,15 @@ #include "projectManager.h" #include "ui_createEditor.h" #include "titleBar.h" +#include "diagramView.h" -CreateEditor::CreateEditor(QWidget *parent) +CreateEditor::CreateEditor(QWidget *parent,DiagramView* p) : QDialog(parent) , ui(new Ui::createEditor) + , m_pView(p) { ui->setupUi(this); + setWindowModality(Qt::ApplicationModal); this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); initial(); } @@ -37,6 +40,27 @@ void CreateEditor::showDlg() void CreateEditor::onOkClicked() { + bool val = m_pView->projectExist(); + if(val){ + QMessageBox msgBox; + msgBox.setText(QString::fromWCharArray(L"提示")); + msgBox.setInformativeText(QString::fromWCharArray(L"该操作将导致未保存数据丢失,是否继续")); + msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Ok); + int ret = msgBox.exec(); + + switch (ret) { + case QMessageBox::Ok: + break; + case QMessageBox::Cancel: + return; + break; + default: + // should never be reached + break; + } + } + emit projectCreated(); bool res = ProjectManager::instance().createEditorProject(ui->le_name->text()); if(res){ QMessageBox::information(NULL, QString("提示"), QString::fromWCharArray(L"项目名已存在")); diff --git a/source/diagramView.cpp b/source/diagramView.cpp index b1d9833..3eeb43c 100644 --- a/source/diagramView.cpp +++ b/source/diagramView.cpp @@ -60,7 +60,7 @@ void DiagramView::initial() // 展开所有节点 ui->treeView->expandAll(); // 显示树视图 - ui->treeView->setWindowTitle(QObject::tr("组态图结构")); + //ui->treeView->setWindowTitle(QObject::tr("组态图结构")); } void DiagramView::loadTopologyFromDB() @@ -68,6 +68,21 @@ void DiagramView::loadTopologyFromDB() } +void DiagramView::clearProjectTree() +{ + ui->treeWidget->clear(); +} + +bool DiagramView::projectExist() +{ + for (int i = 0; i < ui->treeWidget->topLevelItemCount(); ++i) { + if (ui->treeWidget->topLevelItem(i)->columnCount() > 0) { + return true; + } + } + return false; +} + void DiagramView::onIndexRbtnClicked(const QPoint &pos) { // 获取当前点击的位置对应的索引 @@ -339,8 +354,6 @@ void DiagramView::onEditorSaved(const QString& strPro,const QString& autor,QUuid void DiagramView::onNewEditorClicked() { - ProjectManager::instance().unloadEditorProject(QString()); - ui->treeWidget->clear(); emit createProject(); } diff --git a/source/loadPageDlg.cpp b/source/loadPageDlg.cpp index bf10d3a..76417ed 100644 --- a/source/loadPageDlg.cpp +++ b/source/loadPageDlg.cpp @@ -8,6 +8,7 @@ LoadPageDlg::LoadPageDlg(QWidget *parent) , ui(new Ui::loadPageDlg) { ui->setupUi(this); + setWindowModality(Qt::ApplicationModal); this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); initial(); } diff --git a/source/mainwindow.cpp b/source/mainwindow.cpp index c15ce83..3fa7429 100644 --- a/source/mainwindow.cpp +++ b/source/mainwindow.cpp @@ -349,11 +349,15 @@ void CMainWindow::onSignal_loadProject() void CMainWindow::onAction_createEditor() { if(m_pCreateEdiotr == nullptr){ - m_pCreateEdiotr = new CreateEditor(this); + m_pCreateEdiotr = new CreateEditor(this,m_pDiagramView); connect(&ProjectManager::instance(),&ProjectManager::createNewEditor,m_pDiagramCavas,&DiagramCavas::onSignal_createEditPanel); connect(&ProjectManager::instance(),&ProjectManager::prepareSaveEditor,m_pDiagramCavas,&DiagramCavas::onSignal_prepareSaveEdit); connect(&ProjectManager::instance(),&ProjectManager::prepareDeleteBaseSetting,m_pDiagramCavas,&DiagramCavas::onSignal_prepareDeleteEditor); connect(&ProjectManager::instance(),&ProjectManager::prepareOpenSetting,m_pDiagramCavas,&DiagramCavas::onSignal_prepareOpenSetting); + connect(m_pCreateEdiotr,&CreateEditor::projectCreated,this,[&](){ + ProjectManager::instance().unloadEditorProject(QString()); + m_pDiagramView->clearProjectTree(); + }); } m_pCreateEdiotr->showDlg(); diff --git a/ui/diagramView.ui b/ui/diagramView.ui index 8fbc9c6..3b6974e 100644 --- a/ui/diagramView.ui +++ b/ui/diagramView.ui @@ -91,13 +91,7 @@ QTabBar::tab:selected { - - - - 1 - - - +