如何在QQuickItem上禁用更新

时间:2017-09-07 11:58:56

标签: c++ qt qml scenegraph qquickitem

我有一个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
}

我在单独的UI上执行某些操作会导致updatePaintNode MyQQuickItem被解雇。如果我在cpp一侧有一个指向MyQQuickItem的指针,那么

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

当我不想要它时,如何禁用MyQQuickItem的updatePaintNode?
次要问题:如果是,请问如何重新恢复?

1 个答案:

答案 0 :(得分:1)

如果和updatePaintNode()被调用的话很可能是场景图内部的东西,并不是真的有意修改。

也许尝试做一些不那么具有侵略性的事情:

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