Browse Source

修复删除已打开项目时的 crash

chengxr 1 year ago
parent
commit
83eaabc69b

+ 4 - 2
QFD/view/HomeView.cpp

@@ -220,8 +220,10 @@ void HomeView::slotDeleteProject(ProjectInfo *proj)
         int code = ProjectManager::deleteProject(proj->id);
         QFDAlert::showAlertWithCode(code, this);
         if (code == QF_CODE_SUCCEEDED) {
-            m_projList.removeOne(proj);
-            m_projListWidget->removeProject(proj);
+            //            m_projList.removeOne(proj);
+            //            m_projListWidget->removeProject(proj);
+            emit sigDeleteProject(proj);
+            loadProjects();
         }
     }
 }

+ 1 - 0
QFD/view/HomeView.h

@@ -29,6 +29,7 @@ public:
 
 signals:
     void sigOpenProject(ProjectInfo *proj);
+    void sigDeleteProject(ProjectInfo *proj);
 
 private:
     void initWidgets();

+ 18 - 0
QFD/view/MainWindow.cpp

@@ -50,6 +50,11 @@ void StackedWidget::addWidget(QWidget *widget)
     m_view->addWidget(widget);
 }
 
+QWidget *StackedWidget::widget(int index) const
+{
+    return m_view->widget(index);
+}
+
 void StackedWidget::removeWidget(QWidget *widget)
 {
     m_view->removeWidget(widget);
@@ -155,6 +160,7 @@ void MainWindow::initMainPage()
     connect(m_naviInterface, &NavigationInterface::displayModeChanged, m_titleBar, &StandardTitleBar::raise);
     connect(m_userView, &UserView::signalLogout, this, &MainWindow::slotLogout);
     connect(m_homeView, &HomeView::sigOpenProject, this, &MainWindow::slotOpenProject);
+    connect(m_homeView, &HomeView::sigDeleteProject, this, &MainWindow::slotDeleteProject);
 }
 
 void MainWindow::initNavigation()
@@ -274,3 +280,15 @@ void MainWindow::slotCloseProject()
     m_naviInterface->removeWidget(sender()->objectName());
     m_stackWidget->setCurrentIndex(0);
 }
+
+void MainWindow::slotDeleteProject(ProjectInfo *proj)
+{
+    QString n = QString("project_%1").arg(proj->id);
+    int index = m_stackWidget->index(n);
+    if (index >= 0) {
+        QWidget *w = m_stackWidget->widget(index);
+        m_stackWidget->removeWidget(w);
+        m_naviInterface->removeWidget(n);
+        m_stackWidget->setCurrentIndex(0);
+    }
+}

+ 4 - 0
QFD/view/MainWindow.h

@@ -29,6 +29,8 @@ public:
 
     void addWidget(QWidget *widget);
 
+    QWidget *widget(int index) const;
+
     void removeWidget(QWidget *widget);
 
     void setCurrentWidget(QWidget *widget, bool popOut = false);
@@ -81,6 +83,8 @@ private slots:
 
     void slotCloseProject();
 
+    void slotDeleteProject(ProjectInfo *proj);
+
 private:
     CustomTitleBar *m_titleBar = 0;
 

+ 3 - 0
QFD/widgets/DataCollectionWidget.cpp

@@ -126,6 +126,9 @@ void DataCollectionWidget::setupTabWidget()
 
             // 导入效能评估的权重分析数据
             // 导入其他评估的权重分析数据和评估数据
+
+            qDebug() << __FUNCTION__ << __LINE__ << process.indexType << process.type << process.dSource << endl;
+
             if (process.dSource >= 0) {
                 if (process.type == SchemePlanManager::ImportEvalData
                     && process.indexType == ProjectManager::EfficiencyIndex) {