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;
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;
DockManager *m_dockManager = nullptr;
AutoHideDockContainer *m_autoHideDockContainer = nullptr;
@@ -328,7 +329,7 @@ DockAreaWidget::DockAreaWidget(DockManager *dockManager, DockContainerWidget *pa
setLayout(d->m_layout);
d->createTitleBar();
d->m_contentsLayout = new DockAreaLayout(d->m_layout);
d->m_contentsLayout = std::make_unique<DockAreaLayout>(d->m_layout);
if (d->m_dockManager)
emit d->m_dockManager->dockAreaCreated(this);
}
@@ -336,8 +337,6 @@ DockAreaWidget::DockAreaWidget(DockManager *dockManager, DockContainerWidget *pa
DockAreaWidget::~DockAreaWidget()
{
qCInfo(adsLog) << Q_FUNC_INFO;
delete d->m_contentsLayout;
delete d;
}
DockManager *DockAreaWidget::dockManager() const

View File

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