我一直在使用 QmlOgre Qt示例,使其适用于Qt5 final。原始示例本身看起来很好,并且按预期运行。我的代码在这里:https://github.com/advancingu/QmlOgre
但是我发现,通过从C ++或示例QML场景中的简单计时器发出的更改信号修改QML文本项时会出现问题。例如,我添加了一个10毫秒的QML计时器,它只是增加一个计数器并将其分配给一个文本项。相应的代码位于:https://github.com/advancingu/QmlOgre/tree/issue
现在发生的是,在每个帧上,文本项的大多数字符(除了一个或两个)随机消失。每帧中哪一个消失了变化,因此有很多闪烁。显示的字符是正确的字符,位于正确的位置。
我的观察一直是这个问题只出现在一些应用程序执行中,所以它看起来像一个线程问题(QmlEngine运行一个处理QML对象绑定的线程,QML绘图有自己的线程,其中Ogre生活/必须生活)。
任何人都知道为什么会发生这种情况或如何解决这个问题?
答案 0 :(得分:1)
仍不确定导致此问题的原因,但我找到了一种方法来修复它,方法是在OgreNode
中创建一个单独的OpenGL上下文以供Ogre使用。当然这可能会导致性能恶化,但这仍然比不能可靠工作的东西更好。我的存储库中的代码已使用修复程序进行更新。
答案 1 :(得分:0)
在我的情况下,我解决了渲染前glPushAttrib(GL_ALL_ATTRIB_BITS)
和glPopAttrib()
之后的问题。您还应确保所有绘图都在beginNativePainting()
和endNativePainting()
之间进行(请参阅http://doc.qt.io/qt-5.8/qpainter.html#beginNativePainting)。