From f82b33a49e6153d768b969eb55a067ea0b3cbafd Mon Sep 17 00:00:00 2001 From: oberion Date: Sat, 26 Nov 2011 21:32:41 +0100 Subject: [PATCH] Deleting the MainWindow instance after closing application Fixed some destructor commands --- src/QGCCore.cc | 3 ++- src/ui/HDDisplay.cc | 21 ++++++++++++++++++--- src/ui/HSIDisplay.cc | 5 +++++ src/ui/HSIDisplay.h | 2 +- src/ui/MainWindow.cc | 16 ++++++++-------- src/ui/MainWindow.h | 2 +- src/ui/QGCRemoteControlView.cc | 16 +++++++++++----- 7 files changed, 46 insertions(+), 19 deletions(-) diff --git a/src/QGCCore.cc b/src/QGCCore.cc index 1d22ae53f..1b08a062e 100644 --- a/src/QGCCore.cc +++ b/src/QGCCore.cc @@ -204,8 +204,9 @@ QGCCore::~QGCCore() { //mainWindow->storeSettings(); mainWindow->close(); - mainWindow->deleteLater(); + //mainWindow->deleteLater(); // Delete singletons + delete MainWindow::instance(); delete LinkManager::instance(); delete UASManager::instance(); } diff --git a/src/ui/HDDisplay.cc b/src/ui/HDDisplay.cc index bedc2f83f..53a5d637d 100644 --- a/src/ui/HDDisplay.cc +++ b/src/ui/HDDisplay.cc @@ -50,8 +50,8 @@ HDDisplay::HDDisplay(QStringList* plotList, QString title, QWidget *parent) : acceptUnitList(new QStringList()), lastPaintTime(0), columns(3), - valuesChanged(true)/*, - m_ui(new Ui::HDDisplay)*/ + valuesChanged(true), + m_ui(NULL) { setWindowTitle(title); //m_ui->setupUi(this); @@ -135,7 +135,22 @@ HDDisplay::HDDisplay(QStringList* plotList, QString title, QWidget *parent) : HDDisplay::~HDDisplay() { saveState(); - delete m_ui; + if(this->refreshTimer) + { + delete this->refreshTimer; + } + if(this->acceptList) + { + delete this->acceptList; + } + if(this->acceptUnitList) + { + delete this->acceptUnitList; + } + if(this->m_ui) + { + delete m_ui; + } } QSize HDDisplay::sizeHint() const diff --git a/src/ui/HSIDisplay.cc b/src/ui/HSIDisplay.cc index ec0a309c2..296e25d3e 100644 --- a/src/ui/HSIDisplay.cc +++ b/src/ui/HSIDisplay.cc @@ -136,6 +136,11 @@ HSIDisplay::HSIDisplay(QWidget *parent) : setFocusPolicy(Qt::StrongFocus); } +HSIDisplay::~HSIDisplay() +{ + +} + void HSIDisplay::resetMAVState() { mavInitialized = false; diff --git a/src/ui/HSIDisplay.h b/src/ui/HSIDisplay.h index df3608dfb..cdce6e7d9 100644 --- a/src/ui/HSIDisplay.h +++ b/src/ui/HSIDisplay.h @@ -48,7 +48,7 @@ class HSIDisplay : public HDDisplay Q_OBJECT public: HSIDisplay(QWidget *parent = 0); - // ~HSIDisplay(); + ~HSIDisplay(); public slots: void setActiveUAS(UASInterface* uas); diff --git a/src/ui/MainWindow.cc b/src/ui/MainWindow.cc index 51858292d..1f0e39613 100644 --- a/src/ui/MainWindow.cc +++ b/src/ui/MainWindow.cc @@ -91,7 +91,7 @@ MainWindow::MainWindow(QWidget *parent): currentStyle(QGC_MAINWINDOW_STYLE_INDOOR), aboutToCloseFlag(false), changingViewsFlag(false), - centerStackActionGroup(this), + centerStackActionGroup(new QActionGroup(this)), styleFileName(QCoreApplication::applicationDirPath() + "/style-indoor.css"), autoReconnect(false), lowPowerMode(false) @@ -138,7 +138,7 @@ MainWindow::MainWindow(QWidget *parent): setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); // Setup UI state machines - centerStackActionGroup.setExclusive(true); + centerStackActionGroup->setExclusive(true); centerStack = new QStackedWidget(this); setCentralWidget(centerStack); @@ -246,8 +246,8 @@ MainWindow::~MainWindow() if (dockWidget) { // Remove dock widget from main window - removeDockWidget(dockWidget); - delete dockWidget->widget(); + // removeDockWidget(dockWidget); + // delete dockWidget->widget(); delete dockWidget; } else @@ -417,14 +417,14 @@ void MainWindow::buildCommonWidgets() parametersDockWidget->setObjectName("PARAMETER_INTERFACE_DOCKWIDGET"); addTool(parametersDockWidget, tr("Calibration and Parameters"), Qt::RightDockWidgetArea); } - + if (!hsiDockWidget) { hsiDockWidget = new QDockWidget(tr("Horizontal Situation Indicator"), this); hsiDockWidget->setWidget( new HSIDisplay(this) ); hsiDockWidget->setObjectName("HORIZONTAL_SITUATION_INDICATOR_DOCK_WIDGET"); addTool(hsiDockWidget, tr("Horizontal Situation"), Qt::BottomDockWidgetArea); } - + if (!headDown1DockWidget) { headDown1DockWidget = new QDockWidget(tr("Flight Display"), this); HDDisplay* hdDisplay = new HDDisplay(acceptList, "Flight Display", this); @@ -442,7 +442,7 @@ void MainWindow::buildCommonWidgets() headDown2DockWidget->setObjectName("HEAD_DOWN_DISPLAY_2_DOCK_WIDGET"); addTool(headDown2DockWidget, tr("Actuator Status"), Qt::RightDockWidgetArea); } - + if (!rcViewDockWidget) { rcViewDockWidget = new QDockWidget(tr("Radio Control"), this); rcViewDockWidget->setWidget( new QGCRemoteControlView(this) ); @@ -555,7 +555,7 @@ void MainWindow::addCentralWidget(QWidget* widget, const QString& title) QVariant var; var.setValue((QWidget*)widget); tempAction->setData(var); - centerStackActionGroup.addAction(tempAction); + centerStackActionGroup->addAction(tempAction); connect(tempAction,SIGNAL(triggered()),this, SLOT(showCentralWidget())); connect(widget, SIGNAL(visibilityChanged(bool)), tempAction, SLOT(setChecked(bool))); tempAction->setChecked(widget->isVisible()); diff --git a/src/ui/MainWindow.h b/src/ui/MainWindow.h index 9935a8f87..1f6195cdf 100644 --- a/src/ui/MainWindow.h +++ b/src/ui/MainWindow.h @@ -303,7 +303,7 @@ protected: QSettings settings; QStackedWidget *centerStack; - QActionGroup centerStackActionGroup; + QActionGroup* centerStackActionGroup; // Center widgets QPointer linechartWidget; diff --git a/src/ui/QGCRemoteControlView.cc b/src/ui/QGCRemoteControlView.cc index f694ec5f0..7efc3150e 100644 --- a/src/ui/QGCRemoteControlView.cc +++ b/src/ui/QGCRemoteControlView.cc @@ -43,8 +43,8 @@ QGCRemoteControlView::QGCRemoteControlView(QWidget *parent) : uasId(-1), rssi(0.0f), updated(false), - channelLayout(new QVBoxLayout())//, - //ui(new Ui::QGCRemoteControlView) + channelLayout(new QVBoxLayout()), + ui(NULL) { ui->setupUi(this); QGridLayout* layout = new QGridLayout(this); @@ -71,8 +71,14 @@ QGCRemoteControlView::QGCRemoteControlView(QWidget *parent) : QGCRemoteControlView::~QGCRemoteControlView() { - delete ui; - delete channelLayout; + if(this->ui) + { + delete ui; + } + if(this->channelLayout) + { + delete channelLayout; + } } void QGCRemoteControlView::setUASId(int id) @@ -172,7 +178,7 @@ void QGCRemoteControlView::setRemoteRSSI(float rssiNormalized) void QGCRemoteControlView::appendChannelWidget(int channelId) { // Create new layout - QHBoxLayout* layout = new QHBoxLayout(); + QHBoxLayout* layout = new QHBoxLayout(this); // Add content layout->addWidget(new QLabel(QString("Channel %1").arg(channelId + 1), this)); QLabel* raw = new QLabel(this); -- 2.22.0