diff options
Diffstat (limited to 'src/quick/util/qquickconnections.cpp')
-rw-r--r-- | src/quick/util/qquickconnections.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/quick/util/qquickconnections.cpp b/src/quick/util/qquickconnections.cpp index 27b66ba38f..8116ac3425 100644 --- a/src/quick/util/qquickconnections.cpp +++ b/src/quick/util/qquickconnections.cpp @@ -151,6 +151,16 @@ QObject *QQuickConnections::target() const return d->targetSet ? d->target : parent(); } +class QQmlBoundSignalDeleter : public QObject +{ +public: + QQmlBoundSignalDeleter(QQmlBoundSignal *signal) : m_signal(signal) { m_signal->removeFromObject(); } + ~QQmlBoundSignalDeleter() { delete m_signal; } + +private: + QQmlBoundSignal *m_signal; +}; + void QQuickConnections::setTarget(QObject *obj) { Q_D(QQuickConnections); @@ -161,7 +171,7 @@ void QQuickConnections::setTarget(QObject *obj) // It is possible that target is being changed due to one of our signal // handlers -> use deleteLater(). if (s->isEvaluating()) - s->deleteLater(); + (new QQmlBoundSignalDeleter(s))->deleteLater(); else delete s; } |