@@ -32,6 +32,8 @@ ProjectLoader::ProjectLoader(QObject *parent) :
3232 }
3333 });
3434
35+ connect (qApp, &QCoreApplication::aboutToQuit, this , &ProjectLoader::clear);
36+
3537 initTimer ();
3638
3739 // Register pen blocks
@@ -64,45 +66,7 @@ void ProjectLoader::setFileName(const QString &newFileName)
6466
6567 m_fileName = newFileName;
6668
67- // Stop the project
68- if (m_engine)
69- m_engine->stop ();
70-
71- // Reset stage model
72- m_stage.init (nullptr );
73-
74- if (m_stage.renderedTarget ())
75- m_stage.renderedTarget ()->update ();
76-
77- // Delete old sprites
78- for (SpriteModel *sprite : m_sprites)
79- sprite->deleteLater ();
80-
81- m_sprites.clear ();
82- emit spritesChanged ();
83-
84- // Delete old clones
85- for (SpriteModel *clone : m_clones)
86- deleteCloneObject (clone);
87-
88- m_clones.clear ();
89- emit clonesChanged ();
90-
91- // Delete old monitors
92- for (MonitorModel *monitor : m_monitors) {
93- emit monitorRemoved (monitor);
94- monitor->deleteLater ();
95- }
96-
97- m_monitors.clear ();
98- emit monitorsChanged ();
99-
100- // Clear the engine
101- if (m_engine)
102- m_engine->clear ();
103-
104- m_engine = nullptr ;
105- emit engineChanged ();
69+ clear ();
10670
10771 m_project.setFileName (m_fileName.toStdString ());
10872 m_loadStatus = false ;
@@ -248,6 +212,49 @@ void ProjectLoader::callLoad(ProjectLoader *loader)
248212 loader->load ();
249213}
250214
215+ void ProjectLoader::clear ()
216+ {
217+ // Stop the project
218+ if (m_engine)
219+ m_engine->stop ();
220+
221+ // Reset stage model
222+ m_stage.init (nullptr );
223+
224+ if (m_stage.renderedTarget ())
225+ m_stage.renderedTarget ()->update ();
226+
227+ // Delete old sprites
228+ for (SpriteModel *sprite : m_sprites)
229+ sprite->deleteLater ();
230+
231+ m_sprites.clear ();
232+ emit spritesChanged ();
233+
234+ // Delete old clones
235+ for (SpriteModel *clone : m_clones)
236+ deleteCloneObject (clone);
237+
238+ m_clones.clear ();
239+ emit clonesChanged ();
240+
241+ // Delete old monitors
242+ for (MonitorModel *monitor : m_monitors) {
243+ emit monitorRemoved (monitor);
244+ monitor->deleteLater ();
245+ }
246+
247+ m_monitors.clear ();
248+ emit monitorsChanged ();
249+
250+ // Clear the engine
251+ if (m_engine)
252+ m_engine->clear ();
253+
254+ m_engine = nullptr ;
255+ emit engineChanged ();
256+ }
257+
251258void ProjectLoader::load ()
252259{
253260 m_unpositionedMonitors.clear ();
0 commit comments