如何更新仅在C ++级别创建的QQuickItem

时间:2017-08-21 17:24:18

标签: c++ qt scenegraph qtopengl qquickitem

我有一个QQuickItem派生类,如下所示

class MyQQuickItem : public QQuickItem 
{
  Q_OBJECT
public:
  MyQQuickItem(QQuickItem *parent = 0);
  ~ MyQQuickItem();

  QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *);
};

我也有自己的TextureNode课程。

我在QML方面注册了MyQQuickItem&嵌入在main.qml中,如下所示。

MyQQuickItem {
    id: my_quick_item
    objectName: "MyQQuickItemObject"
    visible: false
    width: 500
    height: 500
}

在某个信号的触发器上,我已经连接到MyQQuickItem中的一个广告位,我呼叫this->update()。这当然会触发updatePaintNode&我可以使用我想要的新内容重新绘制MyQQuickItem

是否可以updatePaintNode上触发QQuickItem而不在qml文件中声明它?

想要在C ++级别动态创建MyQQuickItem &在main.qml中没有定义或声明它我怎么能这样做?

核心问题如何创建一个纯粹在C ++级别的QQuickItem,可以通过调用update来更新新内容,以便触发updatePaintNode?

更新 我可以通过以下方式创建QQuickItem

QQuickView * view = new QQuickView;
view->setSource(QUrl(QStringLiteral("qrc:/MyQQuickItem.qml")));
QQuickItem * myquickitem_object = view->rootObject();

但问题是,当我致电updatePaintNode时,我无法触发this->update我应该怎样做才能让QQuickItem更新自己?

0 个答案:

没有答案