如何禁用 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 上做一些事情,这会导致 MyQQuickItemupdatePaintNode 被触发。如果我像这样在 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;
}