Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt-QML-draw-in-cpp子类_C++_Qt_Qml - Fatal编程技术网

C++ Qt-QML-draw-in-cpp子类

C++ Qt-QML-draw-in-cpp子类,c++,qt,qml,C++,Qt,Qml,因此,我试图理解Qt中的绘图,但我不明白这一点: 首先,我有一个qml文件,其中嵌入了一个名为Game的自定义类,该类具有以下构造函数:Game::Game(QQuickItem*parent):QQuickItem(parent) 写入setFlag(ItemHasContents,true)足以使用QSGNode*updatePaintNode(QSGNode*oldNode,UpdatePaintNodeData*)进行绘制使用QSGGeometry(这起作用)。现在我尝试使用相同的过程绘

因此,我试图理解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对象,以便我实际看到绘图吗?

您正在从QML代码创建一个
游戏
对象,因此它在QML场景中正确注册。但是
QCurver
不是在那里创建的,所以它不会工作

是的,它有相同的父项,但这只意味着如果父项被删除,
QCurver
也将被删除。Qt不会修改作为子对象添加的所有QObject,以确定它们是否属于类型
QQuickItem
,是否应该呈现


此外,添加了QML本身,以避免在C++中做小部件层次结构。因此,在QML中组合层次结构。或者,如果你想在C++中有一些用于性能原因——那么可以在<代码> qQuijys中执行<代码> QSGNode < /Cuff>层次结构(这对于用OpenGL渲染复杂场景很有用)。请阅读文章如何创造好的问题。我认为在发布描述您的问题的适当代码之前,您不会得到正确答案。所以,为了确保我理解正确:我必须从QSGNode继承,并在QQuickItem中使用继承的类来使其工作?不,要使用节点,必须知道如何使用纯OprnGL

QSGNode/QSGGeometry
是OpenGL的薄包装。感谢您的帮助,我终于让它工作了。诀窍是创建一个从QSGNode继承的自定义类,在该类中保存所有不同的QSGNode(问题是一个QQuickItem只能有一个父QSGNode)。因此,在这个自定义类中,通常有一个父QSGNode,但所有其他QSGNode都是通过appendChildNode添加到此父节点的。这个代码示例特别帮助了我很多: