如何禁用 QQuickItem 的更新
How to disable update on a QQuickItem
我有一个 QQuickItem
派生的 class
// 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
}
我正在单独的 UI 上做一些事情,这会导致 MyQQuickItem
的 updatePaintNode
被触发。如果我像这样在 cpp 端有一个指向 MyQQuickItem 的指针,
QQuickItem * my_quick_item_ptr = m_qml_engine->rootObjects()[0]->findChild<QQuickItem*>("myquickitem");
如何在我不希望调用 MyQQuickItem
的 updatePaintNode 时禁用它?
第二个问题:如果是,如何重新恢复?
如果以及何时调用 updatePaintNode()
很可能是场景图内部内容,并非真正打算修改。
也许尝试做一些侵入性较小的事情,例如:
QSGNode * MyQQuickItem::updatePaintNode(QSGNode * oldNode, UpdatePaintNodeData * updatePaintNodeData) {
if (doNotUpdate) return oldNode;
// draw UI logic
return node;
}
我有一个 QQuickItem
派生的 class
// 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
}
我正在单独的 UI 上做一些事情,这会导致 MyQQuickItem
的 updatePaintNode
被触发。如果我像这样在 cpp 端有一个指向 MyQQuickItem 的指针,
QQuickItem * my_quick_item_ptr = m_qml_engine->rootObjects()[0]->findChild<QQuickItem*>("myquickitem");
如何在我不希望调用 MyQQuickItem
的 updatePaintNode 时禁用它?
第二个问题:如果是,如何重新恢复?
如果以及何时调用 updatePaintNode()
很可能是场景图内部内容,并非真正打算修改。
也许尝试做一些侵入性较小的事情,例如:
QSGNode * MyQQuickItem::updatePaintNode(QSGNode * oldNode, UpdatePaintNodeData * updatePaintNodeData) {
if (doNotUpdate) return oldNode;
// draw UI logic
return node;
}