diff options
Diffstat (limited to 'src/qml/qml/qqmlengine.cpp')
-rw-r--r-- | src/qml/qml/qqmlengine.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp index 54ec5e1dcd..d5a8371c7f 100644 --- a/src/qml/qml/qqmlengine.cpp +++ b/src/qml/qml/qqmlengine.cpp @@ -213,7 +213,8 @@ QQmlEnginePrivate::~QQmlEnginePrivate() void QQmlPrivate::qdeclarativeelement_destructor(QObject *o) { - if (QQmlData *d = QQmlData::get(o)) { + QObjectPrivate *p = QObjectPrivate::get(o); + if (QQmlData *d = QQmlData::get(p)) { if (d->ownContext) { for (QQmlRefPointer<QQmlContextData> lc = d->ownContext->linkedContext(); lc; lc = lc->linkedContext()) { @@ -231,6 +232,12 @@ void QQmlPrivate::qdeclarativeelement_destructor(QObject *o) if (d->outerContext && d->outerContext->contextObject() == o) d->outerContext->setContextObject(nullptr); + if (d->hasVMEMetaObject || d->hasInterceptorMetaObject) { + p->metaObject->objectDestroyed(o); + p->metaObject = nullptr; + d->hasVMEMetaObject = d->hasInterceptorMetaObject = false; + } + // Mark this object as in the process of deletion to // prevent it resolving in bindings QQmlData::markAsDeleted(o); |