diff --git a/src/controls/QskSkinlet.cpp b/src/controls/QskSkinlet.cpp index 3cdc2648..2ac36f97 100644 --- a/src/controls/QskSkinlet.cpp +++ b/src/controls/QskSkinlet.cpp @@ -261,10 +261,8 @@ void QskSkinlet::updateNode( QskSkinnable* skinnable, QSGNode* parentNode ) cons replaceChildNode( DebugRole, parentNode, oldNode, newNode ); } - for ( int i = 0; i < m_data->nodeRoles.size(); i++ ) + for ( const auto nodeRole : m_data->nodeRoles ) { - const auto nodeRole = m_data->nodeRoles[ i ]; - Q_ASSERT( nodeRole < FirstReservedRole ); oldNode = QskSGNode::findChildNode( parentNode, nodeRole ); diff --git a/src/nodes/QskSGNode.cpp b/src/nodes/QskSGNode.cpp index b4afabae..6288c387 100644 --- a/src/nodes/QskSGNode.cpp +++ b/src/nodes/QskSGNode.cpp @@ -69,6 +69,23 @@ static void qskInsertChildSorted( QSGNode* parent, QSGNode* child, parent->prependChildNode( child ); } +void QskSGNode::setParentNode( QSGNode* node, QSGNode* parent ) +{ + if ( node ) + { + auto oldParent = node->parent(); + + if ( oldParent != parent ) + { + if ( oldParent ) + oldParent->removeChildNode( node ); + + if ( parent ) + parent->appendChildNode( node ); + } + } +} + QSGNode* QskSGNode::findChildNode( QSGNode* parent, quint8 role ) { auto node = parent->firstChild(); diff --git a/src/nodes/QskSGNode.h b/src/nodes/QskSGNode.h index 51e9804c..f4b7c22d 100644 --- a/src/nodes/QskSGNode.h +++ b/src/nodes/QskSGNode.h @@ -55,6 +55,8 @@ namespace QskSGNode // including child QSK_EXPORT void removeAllChildNodesFrom( QSGNode* parent, QSGNode* child ); + QSK_EXPORT void setParentNode( QSGNode* child, QSGNode* parent ); + template< typename Node > inline Node* createNode( quint8 role ) {