From f12e2061c460504d6db1d1370e97b5eeead9c7bf Mon Sep 17 00:00:00 2001 From: Mitch Curtis Date: Fri, 25 Sep 2020 11:49:39 +0200 Subject: QQuickMenu: fix contentModel memory leak Q_Q should not be used in a QObjectPrivate-derivative's constructor, as q will be null at that stage. Instead, add QQuickMenuPrivate::init() and create the contentModel there. Pick-to: 5.15 5.12 Fixes: QTBUG-86851 Change-Id: Ia2a955e718cc0486af5a05e24fcfcb1c4bacb48d Reviewed-by: Andy Shaw --- src/quicktemplates2/qquickmenu.cpp | 7 ++++++- src/quicktemplates2/qquickmenu_p_p.h | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/quicktemplates2/qquickmenu.cpp b/src/quicktemplates2/qquickmenu.cpp index 815f1a4f..35dc5dd8 100644 --- a/src/quicktemplates2/qquickmenu.cpp +++ b/src/quicktemplates2/qquickmenu.cpp @@ -217,8 +217,12 @@ public: QQuickMenuPrivate::QQuickMenuPrivate() { - Q_Q(QQuickMenu); cascade = shouldCascade(); +} + +void QQuickMenuPrivate::init() +{ + Q_Q(QQuickMenu); contentModel = new QQmlObjectModel(q); } @@ -727,6 +731,7 @@ QQuickMenu::QQuickMenu(QObject *parent) { Q_D(QQuickMenu); setFocus(true); + d->init(); connect(d->contentModel, &QQmlObjectModel::countChanged, this, &QQuickMenu::countChanged); } diff --git a/src/quicktemplates2/qquickmenu_p_p.h b/src/quicktemplates2/qquickmenu_p_p.h index f1a5b3f9..23b4444c 100644 --- a/src/quicktemplates2/qquickmenu_p_p.h +++ b/src/quicktemplates2/qquickmenu_p_p.h @@ -73,6 +73,8 @@ public: return menu->d_func(); } + void init(); + QQuickItem *itemAt(int index) const; void insertItem(int index, QQuickItem *item); void moveItem(int from, int to); -- cgit v1.2.3