diff --git a/src/plugins/simulator/emulated/simulatoremulated.cpp b/src/plugins/simulator/emulated/simulatoremulated.cpp index af48fbbe8..6fd58207f 100644 --- a/src/plugins/simulator/emulated/simulatoremulated.cpp +++ b/src/plugins/simulator/emulated/simulatoremulated.cpp @@ -48,7 +48,7 @@ namespace BlackSimPlugin this->onSettingsChanged(); // init from settings m_myAircraft = this->getOwnAircraft(); // sync with provider - m_monitorWidget.reset(new CSimulatorEmulatedMonitorDialog(this, sGui->mainApplicationWidget())); + m_monitorWidget = new CSimulatorEmulatedMonitorDialog(this, sGui->mainApplicationWidget()); connect(qApp, &QApplication::aboutToQuit, this, &CSimulatorEmulated::closeMonitor); connect(sGui, &CGuiApplication::aboutToShutdown, this, &CSimulatorEmulated::closeMonitor, Qt::QueuedConnection); @@ -58,6 +58,17 @@ namespace BlackSimPlugin this->connectOwnSignals(); } + CSimulatorEmulated::~CSimulatorEmulated() + { + if (m_monitorWidget) + { + // if the widget still exists, close and delete it + m_monitorWidget->close(); + m_monitorWidget->deleteLater(); + m_monitorWidget.clear(); + } + } + bool CSimulatorEmulated::isTimeSynchronized() const { return m_timeSyncronized; diff --git a/src/plugins/simulator/emulated/simulatoremulated.h b/src/plugins/simulator/emulated/simulatoremulated.h index 5b29aeae5..2d5c82ed4 100644 --- a/src/plugins/simulator/emulated/simulatoremulated.h +++ b/src/plugins/simulator/emulated/simulatoremulated.h @@ -24,7 +24,7 @@ #include #include -#include +#include namespace BlackSimPlugin { @@ -50,6 +50,9 @@ namespace BlackSimPlugin BlackMisc::Network::IClientProvider *clientProvider, QObject *parent = nullptr); + //! Destructor + virtual ~CSimulatorEmulated() override; + // functions implemented virtual bool isTimeSynchronized() const override; virtual bool connectTo() override; @@ -177,7 +180,7 @@ namespace BlackSimPlugin BlackMisc::PhysicalQuantities::CTime m_offsetTime; BlackMisc::Simulation::CSimulatedAircraft m_myAircraft; //!< represents own aircraft of simulator BlackMisc::Simulation::CSimulatedAircraftList m_renderedAircraft; //!< represents remote aircraft in simulator - QScopedPointer m_monitorWidget; //!< parent will be main window, so we need to destroy widget when destroyed + QPointer m_monitorWidget; //!< parent will be main window, so we need to destroy widget when destroyed BlackMisc::CConnectionGuard m_connectionGuard; //!< connected with provider BlackMisc::CSettingReadOnly m_pluginSettings { this, &CSimulatorEmulated::onSettingsChanged }; QMap m_interpolators; //!< interpolators per callsign