Qt QML在cpp子类中绘制

时间:2016-09-03 21:34:09

标签: c++ qt qml

所以我试图理解Qt中的绘图,但我不知道这个: 首先,我有一个qml文件,我在其中嵌入了一个名为Game的自定义类,它有一个构造函数:Game::Game(QQuickItem *parent) : QQuickItem(parent) 在构造函数代码中编写setFlag(ItemHasContents, true);足以使用QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *);使用QSGGeometry进行绘制(这很有效)。现在我尝试使用相同的过程绘制子类,但现在它不再起作用了:所以我做的是创建一个名为qcurver的类,并在游戏中创建一个qcurver的实例。 QCurver具有与Game相同的构造函数,并且我传递了Game的父级,因此从技术上讲它与Game具有相同的父级,但现在当我尝试绘制此类时,没有任何反应。有谁知道,我如何传递QML对象进行绘制,以便我实际看到绘图?

1 个答案:

答案 0 :(得分:2)

您正在使用QML代码创建Game对象,因此它已在QML场景中正确注册。但是QCurver没有在那里创建,所以它不起作用。

是的,它具有相同的父级,但它仅表示如果父级被删除 - QCurver也将被删除。 Qt不会修改作为子项添加的所有QObject,以查明它们是否为QQuickItem类型并且应该呈现。

此外,添加QML本身是为了避免在C ++中执行窗口小部件层次结构。因此,在QML中组合层次结构。或者,如果出于性能原因想要在C ++中使用其中一些 - 那么可以在QSGNode内部执行QQuickItem层次结构(这对于使用OpenGL渲染复杂场景非常有用)。