diff options
author | Mitch Curtis <mitch.curtis@qt.io> | 2020-09-25 11:49:39 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2020-09-29 11:20:27 +0000 |
commit | 68a916d8ec4ff964bb1310b4065494e9e041499e (patch) | |
tree | be9bed54b9d49a24ab01e052fa9a2eea3f03bebe | |
parent | f2c5b91201bd3df8de9f47fe71a9d0f2f5b76882 (diff) |
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.
Fixes: QTBUG-86851
Change-Id: Ia2a955e718cc0486af5a05e24fcfcb1c4bacb48d
Reviewed-by: Andy Shaw <andy.shaw@qt.io>
(cherry picked from commit f12e2061c460504d6db1d1370e97b5eeead9c7bf)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/quicktemplates2/qquickmenu.cpp | 7 | ||||
-rw-r--r-- | src/quicktemplates2/qquickmenu_p_p.h | 2 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/quicktemplates2/qquickmenu.cpp b/src/quicktemplates2/qquickmenu.cpp index e4c9b683..01309ef2 100644 --- a/src/quicktemplates2/qquickmenu.cpp +++ b/src/quicktemplates2/qquickmenu.cpp @@ -216,8 +216,12 @@ public: QQuickMenuPrivate::QQuickMenuPrivate() { - Q_Q(QQuickMenu); cascade = shouldCascade(); +} + +void QQuickMenuPrivate::init() +{ + Q_Q(QQuickMenu); contentModel = new QQmlObjectModel(q); } @@ -721,6 +725,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 ec48c919..63553f8a 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); |