2017-09-07 3 views
0

J'ai une classe dérivée QQuickItemComment désactiver la mise à jour sur un QQuickItem

// Class 
class MyQQuickItem : public QQuickItem { 
    Q_OBJECT 
} 

// updatePaintNode in cpp function 
QSGNode * MyQQuickItem::updatePaintNode(QSGNode * oldNode, UpdatePaintNodeData * updatePaintNodeData) { 

    // draw UI logic 
    return node; 
} 

// QML component 
MyQQuickItem { 
    id: my_quick 
    objectName: "myquickitem" 
    width : 500 
    height : 500 
} 

Je suis en train de faire quelque chose sur une interface utilisateur distincte qui provoque la updatePaintNode de MyQQuickItem à cuire. Si j'ai un pointeur vers MyQQuickItem sur le côté cpp comme si,

QQuickItem * my_quick_item_ptr = m_qml_engine->rootObjects()[0]->findChild<QQuickItem*>("myquickitem"); 

Comment désactiver updatePaintNode de MyQQuickItem de se faire appelé quand je ne veux pas que ça?
Question secondaire: Si oui, comment le rétablir à nouveau?

Répondre

1

Si et quand updatePaintNode() est appelé, il s'agit vraisemblablement de choses internes à la scène qui n'étaient pas vraiment destinées à être modifiées.

Peut-être essayer de faire quelque chose comme moins invasive:

QSGNode * MyQQuickItem::updatePaintNode(QSGNode * oldNode, UpdatePaintNodeData * updatePaintNodeData) { 
    if (doNotUpdate) return oldNode; 
    // draw UI logic 
    return node; 
} 
+0

est-il quelque chose dans la classe 'QQuickItem' pour le faire? plutôt que d'utiliser ma propre gestion de drapeau basée sur 'doNotUpdate'? –

+0

Je doute qu'il aura des drapeaux pour faciliter la fonctionnalité inexistante;) C'est juste une propriété supplémentaire, que vous pourriez aussi bien faire puisque vous étendez la classe quand même. Il y a une chance que cela ne fonctionne pas comme prévu, je l'ai juste donné comme idée, allez-y et essayez-le et rapportez le résultat, ainsi je peux supprimer la réponse si ce n'est pas bon. – dtech