Parcourir la source

set data for all pages but only redraw the current screen

xuqiang il y a 5 mois
Parent
commit
a7be5e2ae3
1 fichiers modifiés avec 41 ajouts et 31 suppressions
  1. 41 31
      src/mainwindow.cpp

+ 41 - 31
src/mainwindow.cpp

@@ -55,43 +55,53 @@ void MainWindow::onUpdateScreen(const QJsonObject &obj)
     QElapsedTimer timer;
     timer.start(); // 开始计时
 
-    Canvas *pCanvas = static_cast<Canvas *>(m_pStackedWidget->currentWidget());
-    if(!pCanvas) {
-        LOG_ERROR("error current canvas");
-        return;
-    }
+    ProjectManager &projectMgr = AppContext::instance().projectManager();
+    int canvasCount = projectMgr.canvasCount();
 
-    QList<QWidget *> widgets = pCanvas->widgetList();
-    QList<QStringList> parameters = pCanvas->parameterList();
+    QList<QWidget *> widgets;
+    QList<QStringList> parameters;
 
-    if(widgets.count() != parameters.count()) {
-        LOG_ERROR("error widget count and parameters count");
-        return;
-    }
+    for(int i = 0; i < canvasCount; i++)
+    {
+        Canvas *pCanvas = static_cast<Canvas *>(m_pStackedWidget->widget(i));
+        if(!pCanvas) {
+            LOG_ERROR("error current canvas");
+            return;
+        }
 
-    int count = widgets.count();
+        widgets = pCanvas->widgetList();
+        parameters = pCanvas->parameterList();
 
-    for(int i = 0; i < count; i++)
-    {
-        AbstractWidget *pAbstractWidget = static_cast<AbstractWidget *>(widgets[i]);
-        QStringList widgetParameters;
-        QMetaObject::invokeMethod(pAbstractWidget, "parameters",
-                                      Qt::AutoConnection, Q_RETURN_ARG(QStringList, widgetParameters));
+        if(widgets.count() != parameters.count()) {
+            LOG_ERROR("error widget count and parameters count");
+            return;
+        }
+
+        int count = widgets.count();
 
-        for(auto parameter : widgetParameters)
+        for(int j = 0; j < count; j++)
         {
-            QMetaObject::invokeMethod(
-                pAbstractWidget,
-                "setValue",
-                Qt::AutoConnection,
-                Q_ARG(QString, parameter),
-                Q_ARG(QVariant, obj[parameter].toVariant()),
-                Q_ARG(QString, Utils::timestamp()));
+            AbstractWidget *pAbstractWidget = static_cast<AbstractWidget *>(widgets[j]);
+            QStringList widgetParameters;
+            QMetaObject::invokeMethod(pAbstractWidget, "parameters",
+                                        Qt::AutoConnection, Q_RETURN_ARG(QStringList, widgetParameters));
+
+            for(auto parameter : widgetParameters)
+            {
+                QMetaObject::invokeMethod(
+                    pAbstractWidget,
+                    "setValue",
+                    Qt::AutoConnection,
+                    Q_ARG(QString, parameter),
+                    Q_ARG(QVariant, obj[parameter].toVariant()),
+                    Q_ARG(QString, Utils::timestamp()));
+            }
+
+            if(pCanvas == m_pStackedWidget->currentWidget()) {
+                QMetaObject::invokeMethod(pAbstractWidget, "redraw", Qt::AutoConnection);
+            }
         }
-        QMetaObject::invokeMethod(
-                pAbstractWidget,
-                "redraw",
-                Qt::AutoConnection);
+
     }
 
     qint64 duration = timer.elapsed(); // 获取经过的毫秒数
@@ -102,7 +112,7 @@ void MainWindow::onPageSwitdh(int state)
 {
     ProjectManager &projectMgr = AppContext::instance().projectManager();
     int canvasCount = projectMgr.canvasCount();
-        if (canvasCount <= 0)
+    if (canvasCount <= 0)
         return;
 
     int currentIndex = m_pStackedWidget->currentIndex();