diff options
| -rw-r--r-- | src/qmlmodels/qqmlinstantiator.cpp | 20 | ||||
| -rw-r--r-- | src/qmlmodels/qqmlinstantiator_p_p.h | 1 |
2 files changed, 11 insertions, 10 deletions
diff --git a/src/qmlmodels/qqmlinstantiator.cpp b/src/qmlmodels/qqmlinstantiator.cpp index fca56dd45a..63ceda37d8 100644 --- a/src/qmlmodels/qqmlinstantiator.cpp +++ b/src/qmlmodels/qqmlinstantiator.cpp @@ -29,25 +29,25 @@ QQmlInstantiatorPrivate::QQmlInstantiatorPrivate() { } -QQmlInstantiatorPrivate::~QQmlInstantiatorPrivate() -{ - qDeleteAll(objects); -} - void QQmlInstantiatorPrivate::clear() { Q_Q(QQmlInstantiator); if (!instanceModel) return; - if (!objects.size()) + + if (objects.isEmpty()) return; for (int i=0; i < objects.size(); i++) { - q->objectRemoved(i, objects[i]); - instanceModel->release(objects[i]); + QObject *object = objects[i]; + emit q->objectRemoved(i, object); + instanceModel->release(object); + if (object && object->parent() == q) + object->setParent(nullptr); } + objects.clear(); - q->objectChanged(); + emit q->objectChanged(); } QObject *QQmlInstantiatorPrivate::modelObject(int index, bool async) @@ -207,6 +207,8 @@ QQmlInstantiator::QQmlInstantiator(QObject *parent) QQmlInstantiator::~QQmlInstantiator() { + Q_D(QQmlInstantiator); + d->clear(); } /*! diff --git a/src/qmlmodels/qqmlinstantiator_p_p.h b/src/qmlmodels/qqmlinstantiator_p_p.h index 49bd54f010..3304ac0f8f 100644 --- a/src/qmlmodels/qqmlinstantiator_p_p.h +++ b/src/qmlmodels/qqmlinstantiator_p_p.h @@ -31,7 +31,6 @@ class Q_QMLMODELS_PRIVATE_EXPORT QQmlInstantiatorPrivate : public QObjectPrivate public: QQmlInstantiatorPrivate(); - ~QQmlInstantiatorPrivate(); void clear(); void regenerate(); |
