summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/qmlmodels/qqmlinstantiator.cpp20
-rw-r--r--src/qmlmodels/qqmlinstantiator_p_p.h1
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();