我一直在研究Qt Quarterly article关于QGraphicsScene
和OpenGL,以便在项目中使用它。我已经决定使用Qt,因为它具有全面的优势,但是已经开始实现从QGLWidget
派生的类,但是我仍然需要实现UI元素。使用引用文章中的技术意味着我也可以使用Qt小部件用于UI,使程序仅依赖于Qt(而不是CEGUI或类似)。
无论如何,我一直在桌面Linux机器上运行该示例,该机器具有Core i7和相当不错的Nvidia卡,并且运行良好,但是我的2010 MacBook Pro(Core i5和Nvidia 330)运行得很差实际上,特别是在使用鼠标与它进行交互时。
问题:有人可以提出改善此样本性能的方法吗?我不是Qt专家,但我认为反应不佳是由于在鼠标处理代码中调用了update()
,并且在方法本身的末尾加上了对update()
的定时调用。我认为需要的是一个后台线程来更新对象移动和一个定时但常量调用update()
。
有人可以对此发表评论吗?
编辑:除了定时器重置之外,我已经尝试删除了对update()
的所有来电,但它的差异很小。
答案 0 :(得分:1)
不幸的是,使用该文章中的建议时所获得的性能非常糟糕。我们在嵌入式系统上尝试过这种方法,但速度很慢。
对我们来说,解决方案是使用QML,这是Qt 4.7中新的“声明性”UI功能。我们在C ++应用程序中嵌入了QML。 QML小部件覆盖在我们的GL场景之上,我们看到了巨大的速度提升。
我们在C ++应用程序中使用QDeclarativeView小部件,它能够显示我们的QML内容。请参阅:http://doc.qt.io/archives/qt-4.7/qdeclarativeview.html。
这应该可以在桌面上正常工作(在Ubuntu上适用于我)。
更有用的链接:
Using QML Bindings in C++ Applications
Integrating QML Code with Existing Qt UI Code
<强> UPDATE! 2015年1月20日强> 在Qt5.4中有一个名为QOpenGLWidget的新类,它基本上可以让你使用具有出色性能的OpenGL背景的“经典”Qt小部件。他们终于直接解决了这个问题!阅读博客文章,然后阅读文档: