Skip to content

Commit 4a6d2d3

Browse files
Changed demos to delete the dock manager when the main window is closes to ensure that all floating widgets als "closed" (destroyed)
1 parent 8443414 commit 4a6d2d3

File tree

6 files changed

+57
-1
lines changed

6 files changed

+57
-1
lines changed

demo/MainWindow.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,9 @@ CMainWindow::~CMainWindow()
634634
void CMainWindow::closeEvent(QCloseEvent* event)
635635
{
636636
d->saveState();
637+
// Delete dock manager here to delete all floating widgets. This ensures
638+
// that all top level windows of the dock manager are properly closed
639+
d->DockManager->deleteLater();
637640
QMainWindow::closeEvent(event);
638641
}
639642

examples/deleteonclose/main.cpp

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,36 @@
55
#include <QMenuBar>
66
#include "DockManager.h"
77

8+
9+
class MainWindow : public QMainWindow
10+
{
11+
private:
12+
ads::CDockManager* m_DockManager = nullptr;
13+
14+
protected:
15+
virtual void closeEvent(QCloseEvent *event) override
16+
{
17+
QMainWindow::closeEvent(event);
18+
if (m_DockManager)
19+
{
20+
m_DockManager->deleteLater();
21+
}
22+
}
23+
24+
public:
25+
void setDockManager(ads::CDockManager* DockManager) {m_DockManager = DockManager;}
26+
};
27+
28+
829
int main(int argc, char *argv[])
930
{
1031
QApplication a(argc, argv);
11-
QMainWindow w;
32+
MainWindow w;
1233

1334
ads::CDockManager::setConfigFlag(ads::CDockManager::FocusHighlighting, true);
1435
ads::CDockManager::setConfigFlag(ads::CDockManager::AllTabsHaveCloseButton, true);
1536
auto dockManager = new ads::CDockManager(&w);
37+
w.setDockManager(dockManager);
1638
QObject::connect(dockManager, &ads::CDockManager::focusedDockWidgetChanged, [] (ads::CDockWidget* old, ads::CDockWidget* now) {
1739
static int Count = 0;
1840
qDebug() << Count++ << " CDockManager::focusedDockWidgetChanged old: " << (old ? old->objectName() : "-") << " now: " << now->objectName() << " visible: " << now->isVisible();

examples/sidebar/MainWindow.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,13 @@ MainWindow::~MainWindow()
5151
{
5252
delete ui;
5353
}
54+
55+
56+
void MainWindow::closeEvent(QCloseEvent *event)
57+
{
58+
QMainWindow::closeEvent(event);
59+
if (m_DockManager)
60+
{
61+
m_DockManager->deleteLater();
62+
}
63+
}

examples/sidebar/MainWindow.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ class MainWindow : public QMainWindow
2222
explicit MainWindow(QWidget *parent = 0);
2323
~MainWindow();
2424

25+
protected:
26+
virtual void closeEvent(QCloseEvent *event) override;
27+
2528
private:
2629
Ui::MainWindow *ui;
2730
ads::CDockManager* m_DockManager;

examples/simple/MainWindow.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,18 @@ MainWindow::~MainWindow()
9999
{
100100
delete ui;
101101
}
102+
103+
104+
void MainWindow::closeEvent(QCloseEvent *event)
105+
{
106+
QMainWindow::closeEvent(event);
107+
if (m_DockManager1)
108+
{
109+
m_DockManager1->deleteLater();
110+
}
111+
112+
if (m_DockManager2)
113+
{
114+
m_DockManager2->deleteLater();
115+
}
116+
}

examples/simple/MainWindow.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ class MainWindow : public QMainWindow
1818
explicit MainWindow(QWidget *parent = 0);
1919
~MainWindow();
2020

21+
protected:
22+
virtual void closeEvent(QCloseEvent *event) override;
23+
2124
private:
2225
Ui::MainWindow *ui;
2326
ads::CDockManager* m_DockManager1;

0 commit comments

Comments
 (0)