diff options
author | Paul Lemire <paul.lemire350@gmail.com> | 2016-05-24 20:05:30 +0200 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2016-05-25 14:44:01 +0000 |
commit | 80ddebcf2bb12debf43321c8b780c64fe1c5904e (patch) | |
tree | 2eaa24b7ae97ea1630840c4239d5c28671ce459e /src | |
parent | d3131c34b421530e29825230ca4392a56c651ef6 (diff) |
Node bookkeeping fix: clear table of connection in QNode dtor
Clearing it in the QNodePrivate dtor is actually too late, this needs to
happen before QNode::destroyed is emitted.
Task-number: QTBUG-53456
Change-Id: I4141b51c3576a348fa4c82a2a4e7806d8b545ab0
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/core/nodes/qnode.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/core/nodes/qnode.cpp b/src/core/nodes/qnode.cpp index 871eaed39..c26a4ca2a 100644 --- a/src/core/nodes/qnode.cpp +++ b/src/core/nodes/qnode.cpp @@ -79,10 +79,6 @@ QNodePrivate::QNodePrivate() QNodePrivate::~QNodePrivate() { - // Disconnect each connection that was stored - for (auto it = m_destructionConnections.begin(), end = m_destructionConnections.end(); it != end; ++it) - QObject::disconnect(it.value()); - m_destructionConnections.clear(); } void QNodePrivate::init(QNode *parent) @@ -639,10 +635,16 @@ QNode::QNode(QNodePrivate &dd, QNode *parent) QNode::~QNode() { + Q_D(QNode); + // Disconnect each connection that was stored + for (auto it = d->m_destructionConnections.begin(), end = d->m_destructionConnections.end(); it != end; ++it) + QObject::disconnect(it.value()); + d->m_destructionConnections.clear(); + + Q_EMIT nodeDestroyed(); + // Notify the backend that the parent lost this node as a child and // that this node is being destroyed. - Q_EMIT nodeDestroyed(); - Q_D(QNode); d->notifyDestructionChangesAndRemoveFromScene(); } |