diff options
Diffstat (limited to 'src/quicktemplates2/qquickcontrol.cpp')
-rw-r--r-- | src/quicktemplates2/qquickcontrol.cpp | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/quicktemplates2/qquickcontrol.cpp b/src/quicktemplates2/qquickcontrol.cpp index 838a841d..4eb411c2 100644 --- a/src/quicktemplates2/qquickcontrol.cpp +++ b/src/quicktemplates2/qquickcontrol.cpp @@ -56,6 +56,8 @@ QT_BEGIN_NAMESPACE +Q_LOGGING_CATEGORY(lcItemManagement, "qt.quick.controls.control.itemmanagement") + /*! \qmltype Control \inherits Item @@ -428,7 +430,7 @@ void QQuickControlPrivate::setContentItem_helper(QQuickItem *item, bool notify) contentItem = item; q->contentItemChange(item, oldContentItem); - delete oldContentItem; + QQuickControlPrivate::hideOldItem(oldContentItem); if (item) { connect(contentItem.data(), &QQuickItem::baselineOffsetChanged, this, &QQuickControlPrivate::updateBaselineOffset); @@ -846,6 +848,22 @@ void QQuickControlPrivate::executeBackground(bool complete) quickCompleteDeferred(q, backgroundName(), background); } +void QQuickControlPrivate::hideOldItem(QQuickItem *item) +{ + if (!item) + return; + + qCDebug(lcItemManagement) << "hiding old item" << item; + + item->setVisible(false); + item->setParentItem(nullptr); + + // Remove the item from the accessibility tree. + QQuickAccessibleAttached *accessible = accessibleAttached(item); + if (accessible) + accessible->setIgnored(true); +} + void QQuickControlPrivate::updateBaselineOffset() { Q_Q(QQuickControl); @@ -1598,7 +1616,7 @@ void QQuickControl::setBackground(QQuickItem *background) } d->removeImplicitSizeListener(d->background, QQuickControlPrivate::ImplicitSizeChanges | QQuickItemPrivate::Geometry); - delete d->background; + QQuickControlPrivate::hideOldItem(d->background); d->background = background; if (background) { |