所以我试图理解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对象进行绘制,以便我实际看到绘图?
答案 0 :(得分:2)
您正在使用QML代码创建Game
对象,因此它已在QML场景中正确注册。但是QCurver
没有在那里创建,所以它不起作用。
是的,它具有相同的父级,但它仅表示如果父级被删除 - QCurver
也将被删除。 Qt不会修改作为子项添加的所有QObject,以查明它们是否为QQuickItem
类型并且应该呈现。
此外,添加QML本身是为了避免在C ++中执行窗口小部件层次结构。因此,在QML中组合层次结构。或者,如果出于性能原因想要在C ++中使用其中一些 - 那么可以在QSGNode
内部执行QQuickItem
层次结构(这对于使用OpenGL渲染复杂场景非常有用)。