diff options
author | Andy Nichols <andy.nichols@qt.io> | 2018-06-04 17:30:04 +0200 |
---|---|---|
committer | Andy Nichols <andy.nichols@qt.io> | 2018-06-05 12:53:41 +0000 |
commit | 10cd55bcacc119fb32c3ff2bee452db7d147d20c (patch) | |
tree | 25c97c260091786414daeec6316470c3fb24b431 | |
parent | 42de0adbab5f889e96a1a025836be9f199c01d8d (diff) |
Throttle Viewer refreshes to once per second
Qt3D can still have issues in the renderer aspect when rapidly
rebuilding scenes. To prevent this issue from crashing the viewer we
need to prevent scene reloads from occurring too quickly. In the future
this will not be necessary.
Task-number: QT3DS-1863
Change-Id: Ib15e83873a5d7896e68fadccf6e7192a6dcba9ee
Reviewed-by: Christian Stromme <christian.stromme@qt.io>
-rw-r--r-- | tools/q3dsviewer/q3dsmainwindow.cpp | 13 | ||||
-rw-r--r-- | tools/q3dsviewer/q3dsmainwindow.h | 4 |
2 files changed, 16 insertions, 1 deletions
diff --git a/tools/q3dsviewer/q3dsmainwindow.cpp b/tools/q3dsviewer/q3dsmainwindow.cpp index 837c63c..1182d8e 100644 --- a/tools/q3dsviewer/q3dsmainwindow.cpp +++ b/tools/q3dsviewer/q3dsmainwindow.cpp @@ -58,6 +58,13 @@ Q3DStudioMainWindow::Q3DStudioMainWindow(Q3DSWindow *view, Q3DSRemoteDeploymentM styleFile.open(QFile::ReadOnly); qApp->setStyleSheet(styleFile.readAll()); + // This timer makes sure that reloads are not called more often than once per second + m_refreshTimer.setInterval(1000); + m_refreshTimer.setSingleShot(true); + connect(&m_refreshTimer, &QTimer::timeout, [this] { + m_okToReload = true; + }); + static const bool enableDebugMenu = qEnvironmentVariableIntValue("Q3DS_DEBUG") >= 1; QWidget *wrapper = QWidget::createWindowContainer(view); @@ -98,7 +105,11 @@ Q3DStudioMainWindow::Q3DStudioMainWindow(Q3DSWindow *view, Q3DSRemoteDeploymentM remote->state() != Q3DSRemoteDeploymentManager::LocalProject && remote->state() != Q3DSRemoteDeploymentManager::RemoteProject) return; - view->engine()->setSource(view->engine()->source()); + if (m_okToReload) { + view->engine()->setSource(view->engine()->source()); + m_refreshTimer.start(); + m_okToReload = false; + } }); fileMenu->addAction(reloadAction); addAction(reloadAction); diff --git a/tools/q3dsviewer/q3dsmainwindow.h b/tools/q3dsviewer/q3dsmainwindow.h index 1d29f88..c38118c 100644 --- a/tools/q3dsviewer/q3dsmainwindow.h +++ b/tools/q3dsviewer/q3dsmainwindow.h @@ -31,6 +31,7 @@ #define Q3DSTUDIOMAINWINDOW_H #include <QMainWindow> +#include <QTimer> QT_BEGIN_NAMESPACE @@ -44,6 +45,9 @@ public: explicit Q3DStudioMainWindow(Q3DSWindow *view, Q3DSRemoteDeploymentManager *remote = nullptr, QWidget *parent = nullptr); static QString fileFilter(); +private: + QTimer m_refreshTimer; + bool m_okToReload = true; }; QT_END_NAMESPACE |