diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index 908591c..c8d87f4 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + diff --git a/examples/emptydockarea/mainwindow.cpp b/examples/emptydockarea/mainwindow.cpp index c8975a8..2dbe99c 100644 --- a/examples/emptydockarea/mainwindow.cpp +++ b/examples/emptydockarea/mainwindow.cpp @@ -56,7 +56,7 @@ CMainWindow::CMainWindow(QWidget *parent) TableDockWidget->resize(250, 150); TableDockWidget->setMinimumSize(200,150); DockManager->addDockWidgetTabToArea(TableDockWidget, CentralDockArea); - //auto TableArea = DockManager->addDockWidget(DockWidgetArea::LeftDockWidgetArea, TableDockWidget); + auto TableArea = DockManager->addDockWidget(DockWidgetArea::LeftDockWidgetArea, TableDockWidget); ui->menuView->addAction(TableDockWidget->toggleViewAction()); table = new QTableWidget(); @@ -67,8 +67,7 @@ CMainWindow::CMainWindow(QWidget *parent) TableDockWidget->setMinimumSizeHintMode(CDockWidget::MinimumSizeHintFromDockWidget); TableDockWidget->resize(250, 150); TableDockWidget->setMinimumSize(200,150); - auto TableArea = DockManager->addDockWidget(DockWidgetArea::LeftDockWidgetArea, TableDockWidget); - //DockManager->addDockWidget(DockWidgetArea::BottomDockWidgetArea, TableDockWidget, TableArea); + DockManager->addDockWidget(DockWidgetArea::BottomDockWidgetArea, TableDockWidget, TableArea); ui->menuView->addAction(TableDockWidget->toggleViewAction()); QTableWidget* propertiesTable = new QTableWidget(); diff --git a/src/DockManager.cpp b/src/DockManager.cpp index 4b14f9a..42f61b8 100644 --- a/src/DockManager.cpp +++ b/src/DockManager.cpp @@ -505,6 +505,20 @@ CDockManager::CDockManager(QWidget *parent) : //============================================================================ CDockManager::~CDockManager() { + // fix memory leaks, see https://github.com/githubuser0xFFFF/Qt-Advanced-Docking-System/issues/307 + std::vector areas; + for ( int i = 0; i != dockAreaCount(); ++i ) + { + areas.push_back( dockArea(i) ); + } + for ( auto area : areas ) + { + for ( auto widget : area->dockWidgets() ) + delete widget; + + delete area; + } + auto FloatingWidgets = d->FloatingWidgets; for (auto FloatingWidget : FloatingWidgets) { @@ -912,6 +926,8 @@ void CDockManager::loadPerspectives(QSettings& Settings) } Settings.endArray(); + Q_EMIT perspectiveListChanged(); + Q_EMIT perspectiveListLoaded(); } diff --git a/src/DockManager.h b/src/DockManager.h index 9681d09..390e283 100644 --- a/src/DockManager.h +++ b/src/DockManager.h @@ -521,10 +521,17 @@ public Q_SLOTS: Q_SIGNALS: /** - * This signal is emitted if the list of perspectives changed + * This signal is emitted if the list of perspectives changed. + * The list of perspectives changes if perspectives are added, removed + * or if the perspective list has been loaded */ void perspectiveListChanged(); + /** + * This signal is emitted if the perspective list has been loaded + */ + void perspectiveListLoaded(); + /** * This signal is emitted if perspectives have been removed */