aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@qt.io>2020-09-25 11:49:39 +0200
committerMitch Curtis <mitch.curtis@qt.io>2020-09-29 10:01:35 +0200
commitf12e2061c460504d6db1d1370e97b5eeead9c7bf (patch)
tree99fe724b5549df65c102ae979e43eaa7d3794416
parentfce0e9a30a82ca8e61f7bd6a090ec3858c0af032 (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. Pick-to: 5.15 5.12 Fixes: QTBUG-86851 Change-Id: Ia2a955e718cc0486af5a05e24fcfcb1c4bacb48d Reviewed-by: Andy Shaw <andy.shaw@qt.io>
-rw-r--r--src/quicktemplates2/qquickmenu.cpp7
-rw-r--r--src/quicktemplates2/qquickmenu_p_p.h2
2 files changed, 8 insertions, 1 deletions
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);