diff --git a/src/qml/types/qqmldelegatemodel.cpp b/src/qml/types/qqmldelegatemodel.cpp index edc36ab630d1943d742390b78104f1f9843a392f..53b8a3c79d8da768cb84bb2e2322069880fd5648 100644 --- a/src/qml/types/qqmldelegatemodel.cpp +++ b/src/qml/types/qqmldelegatemodel.cpp @@ -780,11 +780,16 @@ void QQmlDelegateModelPrivate::emitDestroyingPackage(QQuickPackage *package) QQmlDelegateModelGroupPrivate::get(m_groups[i])->destroyingPackage(package); } +static bool isDoneIncubating(QQmlIncubator::Status status) +{ + return status == QQmlIncubator::Ready || status == QQmlIncubator::Error; +} + void QQDMIncubationTask::statusChanged(Status status) { if (vdm) { vdm->incubatorStatusChanged(this, status); - } else if (status == QQmlIncubator::Ready || status == QQmlIncubator::Error) { + } else if (isDoneIncubating(status)) { Q_ASSERT(incubating); // The model was deleted from under our feet, cleanup ourselves if (incubating->object) { @@ -824,7 +829,7 @@ void QQmlDelegateModelPrivate::removeCacheItem(QQmlDelegateModelItem *cacheItem) void QQmlDelegateModelPrivate::incubatorStatusChanged(QQDMIncubationTask *incubationTask, QQmlIncubator::Status status) { Q_Q(QQmlDelegateModel); - if (status != QQmlIncubator::Ready && status != QQmlIncubator::Error) + if (!isDoneIncubating(status)) return; QQmlDelegateModelItem *cacheItem = incubationTask->incubating; @@ -951,7 +956,7 @@ QObject *QQmlDelegateModelPrivate::object(Compositor::Group group, int index, bo // Remove the temporary reference count. cacheItem->scriptRef -= 1; - if (cacheItem->object) + if (cacheItem->object && (!cacheItem->incubationTask || isDoneIncubating(cacheItem->incubationTask->status()))) return cacheItem->object; cacheItem->releaseObject();