ADS: fix crash on exit

None QObjects are not children of something - so they
need to get tracked.

Task-number: QDS-11555
Change-Id: I866097f9553a6080b30f0c12362bf7ec66321c05
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tim Jenssen
2023-12-19 12:40:16 +01:00
parent 93169e6b5d
commit 671426f4a0
2 changed files with 6 additions and 5 deletions

View File

@@ -189,7 +189,8 @@ struct DockAreaWidgetPrivate
{ {
DockAreaWidget *q = nullptr; DockAreaWidget *q = nullptr;
QBoxLayout *m_layout = nullptr; QBoxLayout *m_layout = nullptr;
DockAreaLayout *m_contentsLayout = nullptr; // DockAreaLayout is not a QObject -> std::unique_ptr manages deletion
std::unique_ptr<DockAreaLayout> m_contentsLayout;
DockAreaTitleBar *m_titleBar = nullptr; DockAreaTitleBar *m_titleBar = nullptr;
DockManager *m_dockManager = nullptr; DockManager *m_dockManager = nullptr;
AutoHideDockContainer *m_autoHideDockContainer = nullptr; AutoHideDockContainer *m_autoHideDockContainer = nullptr;
@@ -328,7 +329,7 @@ DockAreaWidget::DockAreaWidget(DockManager *dockManager, DockContainerWidget *pa
setLayout(d->m_layout); setLayout(d->m_layout);
d->createTitleBar(); d->createTitleBar();
d->m_contentsLayout = new DockAreaLayout(d->m_layout); d->m_contentsLayout = std::make_unique<DockAreaLayout>(d->m_layout);
if (d->m_dockManager) if (d->m_dockManager)
emit d->m_dockManager->dockAreaCreated(this); emit d->m_dockManager->dockAreaCreated(this);
} }
@@ -336,8 +337,6 @@ DockAreaWidget::DockAreaWidget(DockManager *dockManager, DockContainerWidget *pa
DockAreaWidget::~DockAreaWidget() DockAreaWidget::~DockAreaWidget()
{ {
qCInfo(adsLog) << Q_FUNC_INFO; qCInfo(adsLog) << Q_FUNC_INFO;
delete d->m_contentsLayout;
delete d;
} }
DockManager *DockAreaWidget::dockManager() const DockManager *DockAreaWidget::dockManager() const

View File

@@ -9,6 +9,8 @@
#include <QFrame> #include <QFrame>
#include <memory>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
class QAbstractButton; class QAbstractButton;
class QXmlStreamWriter; class QXmlStreamWriter;
@@ -33,7 +35,7 @@ class ADS_EXPORT DockAreaWidget : public QFrame
{ {
Q_OBJECT Q_OBJECT
private: private:
DockAreaWidgetPrivate *d; ///< private data (pimpl) std::unique_ptr<DockAreaWidgetPrivate> d; ///< private data (pimpl)
friend struct DockAreaWidgetPrivate; friend struct DockAreaWidgetPrivate;
friend class DockContainerWidget; friend class DockContainerWidget;
friend class DockContainerWidgetPrivate; friend class DockContainerWidgetPrivate;