QQuickItem 不会渲染

QQuickItem will not render

本文关键字:QQuickItem      更新时间:2023-10-16

我对这个错误很聪明。任何关于如何追踪它的建议将不胜感激。

背景:

我一直在尝试在Qt5中实现一个ogre3d视图作为QQuickItem。有一个例子(qmlogre(表明这是可能的。所需的示例代码对 Win32 进行了大量重构,并不仅仅做演示。该示例只是一个概念证明。

问题:

当我在Ogre代码(SceneManager::createEntity(中调用特定方法时,Qt项将不再渲染。如果我注释掉对该方法的调用,它呈现得很好。如果我注释掉方法中的代码并将其替换为"return 0",它将不再呈现。有问题的代码与图形无关(它将 3d 实体加载到内存中(。

我尝试过:

  • 检查了显示异常的食人魔日志。
  • 将Qt日志记录重定向到文件以查看警告/异常。
  • 已选中"此"指针。我在进入它正在运行的类的方法时动态地强制转换"this",并收到一个非空指针。所以rtti认为这是一个有效的类指针。
  • 为了确保 Qt 代码是正确的,我将 qmlogre 示例中的自定义渲染代码替换为呈现平面颜色矩形的代码。
  • 我似乎没有失忆

我可以在瓦尔格林德下运行这么大而复杂的东西吗?有没有有用的类似工具?(编译器是 Mingw,由 Qt 在 Windows 7 上的 v5.1 下载中提供(

我知道Qt5默认是线程化的。如何判断是否超出了线程堆栈大小?

食人魔不是线程安全的。Qt代码是否有可能同时在不同的线程上运行并崩溃食人魔?我的代码被来自QML的事件调用(它位于Qt插槽中(。

我不知道

Ogre的细节,但文档说实体类使用OpenGL缓冲区。然后,也许您在访问OpenGL后端的线程之间存在冲突。

您是否尝试过像GLIntercept或gDEBugger这样的OpenGL调试器(参见 https://www.opengl.org/wiki/Debugging_Tools(?

你说你正在从 QML 中加载对象。默认情况下,在Qt 5中,这意味着您在Qt工作线程中而不是在QML渲染线程中加载对象。这行不通。所有 Ogre 调用都需要从创建 Ogre 的渲染线程进行,否则会出现未定义的行为。

我还建议在 https://github.com/advancingu/QmlOgre 查看我的QML食人魔示例的分支。这是您提到的示例代码,但重构为库中。现在接近生产就绪还为时过早,但也许您可以从中获得一些代码的想法。