瀏覽代碼

fix unlimited canvas creation

xuqiang 4 月之前
父節點
當前提交
6ac8fd2820
共有 1 個文件被更改,包括 19 次插入1 次删除
  1. 19 1
      src/mainwindow.cpp

+ 19 - 1
src/mainwindow.cpp

@@ -161,7 +161,9 @@ void MainWindow::onPageSwitdh(int state)
 
 void MainWindow::onConfigureUpdate(const QString &filename)
 {
+    int canvasCount;
     ProjectManager &projectMgr = AppContext::instance().projectManager();
+    canvasCount = projectMgr.canvasCount();
     projectMgr.closeProject();
 
     QString srcFileName = QString("%1/%2").arg(QDir::currentPath(), "update/monitor.xml");
@@ -200,6 +202,22 @@ void MainWindow::onConfigureUpdate(const QString &filename)
         return;
     }
 
+    LOG_INFO("begin release exist canvas");
+    {
+        QList<QWidget*> widgets;
+        for (int i = 0; i < m_pStackedWidget->count(); ++i) {
+            widgets << m_pStackedWidget->widget(i);
+        }
+
+        for (QWidget *w : widgets) {
+            Canvas *pCanvas = static_cast<Canvas *>(w);
+            pCanvas->clear();
+            m_pStackedWidget->removeWidget(w);
+            delete w;
+        }
+    }
+    LOG_INFO("release exist canvas complete, widget count: {}", m_pStackedWidget->count());
+
     bool result = projectMgr.openProject(dstFileName);
     if(result)
     {
@@ -212,7 +230,7 @@ void MainWindow::onConfigureUpdate(const QString &filename)
     }
 
     LOG_INFO("start reload monitor configure");
-    int canvasCount = projectMgr.canvasCount();
+    canvasCount = projectMgr.canvasCount();
     int index = -1;
     for(int i = 0; i < canvasCount; i++)
     {