QQuickItemViewTransitionAttached: Avoid dangling pointers

The items referred to here can be deleted when the animation finishes.
Use QPointer to zero them in that case.

Pick-to: 5.15 6.2
Fixes: QTBUG-84196
Change-Id: I695c9e91bd29d0583e4871d03ee946c40aa8a595
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Reviewed-by: Andrei Golubev <andrei.golubev@qt.io>
This commit is contained in:
Ulf Hermann 2021-11-30 15:30:55 +01:00
parent 813fb3ad45
commit 0118a2d6b6
3 changed files with 8 additions and 2 deletions

View File

@ -585,7 +585,7 @@ void QQuickItemViewTransitionableItem::stopTransition()
QQuickViewTransitionAttached::QQuickViewTransitionAttached(QObject *parent)
: QObject(parent), m_item(nullptr), m_index(-1)
: QObject(parent), m_index(-1)
{
}
/*!

View File

@ -226,7 +226,7 @@ private:
QList<int> m_targetIndexes;
QList<QObject *> m_targetItems;
QQuickItem *m_item;
QPointer<QQuickItem> m_item;
int m_index;
};

View File

@ -83,6 +83,12 @@ Window {
property int count: 0
onTriggered: {
// This triggers the crash without retranslate().
// retranslate() got cleverer in 6.2, sidestepping the issue.
replaceExit.animations[0].target = null;
replaceExit.animations[0].target = replaceExit.ViewTransition.item
console.log("timer within", root, "is about to call retranslate")
window.engine.retranslate()
window.calledTranslate()