diff --git a/src/quicktemplates2/qquickpopup.cpp b/src/quicktemplates2/qquickpopup.cpp index 81e50642e4..39bd56a12b 100644 --- a/src/quicktemplates2/qquickpopup.cpp +++ b/src/quicktemplates2/qquickpopup.cpp @@ -1570,6 +1570,14 @@ void QQuickPopup::setParentItem(QQuickItem *parent) emit parentChanged(); } +void QQuickPopup::resetParentItem() +{ + if (QQuickWindow *window = qobject_cast(parent())) + setParentItem(window->contentItem()); + else + setParentItem(qobject_cast(parent())); +} + /*! \qmlproperty Item QtQuick.Controls::Popup::background @@ -2107,12 +2115,8 @@ void QQuickPopup::classBegin() void QQuickPopup::componentComplete() { Q_D(QQuickPopup); - if (!parentItem()) { - if (QQuickItem *item = qobject_cast(parent())) - setParentItem(item); - else if (QQuickWindow *window = qobject_cast(parent())) - setParentItem(window->contentItem()); - } + if (!parentItem()) + resetParentItem(); if (d->visible && d->window) d->transitionManager.transitionEnter(); diff --git a/src/quicktemplates2/qquickpopup_p.h b/src/quicktemplates2/qquickpopup_p.h index 90006193bc..a8e6ea113e 100644 --- a/src/quicktemplates2/qquickpopup_p.h +++ b/src/quicktemplates2/qquickpopup_p.h @@ -100,7 +100,7 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickPopup : public QObject, public QQml Q_PROPERTY(bool mirrored READ isMirrored NOTIFY mirroredChanged FINAL REVISION 3) Q_PROPERTY(QFont font READ font WRITE setFont RESET resetFont NOTIFY fontChanged FINAL) Q_PROPERTY(QPalette palette READ palette WRITE setPalette RESET resetPalette NOTIFY paletteChanged FINAL REVISION 3) - Q_PROPERTY(QQuickItem *parent READ parentItem WRITE setParentItem NOTIFY parentChanged FINAL) + Q_PROPERTY(QQuickItem *parent READ parentItem WRITE setParentItem RESET resetParentItem NOTIFY parentChanged FINAL) Q_PROPERTY(QQuickItem *background READ background WRITE setBackground NOTIFY backgroundChanged FINAL) Q_PROPERTY(QQuickItem *contentItem READ contentItem WRITE setContentItem NOTIFY contentItemChanged FINAL) Q_PROPERTY(QQmlListProperty contentData READ contentData FINAL) @@ -223,6 +223,7 @@ public: QQuickItem *parentItem() const; void setParentItem(QQuickItem *parent); + void resetParentItem(); QQuickItem *background() const; void setBackground(QQuickItem *background); diff --git a/tests/auto/popup/tst_popup.cpp b/tests/auto/popup/tst_popup.cpp index 7566ceff2a..16cdcbeff8 100644 --- a/tests/auto/popup/tst_popup.cpp +++ b/tests/auto/popup/tst_popup.cpp @@ -407,6 +407,28 @@ void tst_popup::windowChange() popup.setParentItem(window.contentItem()); QCOMPARE(popup.window(), &window); QCOMPARE(spy.count(), 3); + + popup.resetParentItem(); + QVERIFY(!popup.window()); + QCOMPARE(spy.count(), 4); + + popup.setParent(&window); + popup.resetParentItem(); + QCOMPARE(popup.window(), &window); + QCOMPARE(spy.count(), 5); + + popup.setParent(this); + popup.resetParentItem(); + QVERIFY(!popup.window()); + QCOMPARE(spy.count(), 6); + + item.setParentItem(window.contentItem()); + popup.setParent(&item); + popup.resetParentItem(); + QCOMPARE(popup.window(), &window); + QCOMPARE(spy.count(), 7); + + popup.setParent(nullptr); } Q_DECLARE_METATYPE(QQuickPopup::ClosePolicy)