如何优化基于QGraphicsView的应用程序的性能?

Ven*_*emo 5 opengl performance qt qt4 qgraphicsview

我有一个基于Qt Graphics View框架的应用程序.
这是一个拼图游戏,它基本上将像素图切割成较小的像素图(拼图)并将其显示为QGraphicsItems中的s QGraphicsView.我希望这款应用能够在智能手机和平板电脑上运行.(它已经在诺基亚N900和一些Symbian手机上运行.尚未针对Symbian ^ 3进行优化.)
来源是Gitorious.

该项目继承QGraphicsItemQObject,并有Q_PROPERTY对宏pos()rotation()QGraphicsItem,以实现与Qt的动画框架动画它们.
我对项目执行转换,例如缩放和旋转(后者仅在开发中的多点触控分支中),我也使用QGraphicsDropShadowEffect它们.

我使用a QGLWidget作为视口,QGraphicsView以便为应用程序启用OpenGL加速.

问题在于,尽管采用OpenGL加速,但应用并不流畅.(特别是动画,特别是因为我将旋转变换添加到多点触控分支.)显示的图形项目不多,并且没有3D操作或任何严重的,只有2D绘图.
我根本不是图形专家,所以我不知道为什么这个应用程序运行缓慢.我见过其他比较复杂的游戏比这更顺畅.

秘密是什么?我怎么能优化这个应用程序?

Ven*_*emo 5

好的,我等了很长时间才找到解决方案.

与此同时,我在QML中重写了应用程序的用户界面,令我惊讶的是,性能更好,现在应用程序非常流畅.

一些结论:

  • 在全屏模式下运行时,OpenGL加速最佳.将整个UI放在QDeclarativeView中并将其viewPort设置为QGLWidget,并以全屏显示它使这成为可能.
  • 似乎QWidgets的开销比我们想象的要多得多.
  • QML可以比预期更好地执行.
  • QGraphicsDropshadowEffect的影响是微不足道的,但我删除它,现在我使用笔画效果.将来,我可能会考虑使用QML着色器效果.
  • 为QDeclarativeView设置各种优化标志是值得的
  • 具有Alpha透明度的绘图项目比没有绘制它们更糟糕.尽可能避免alpha透明度.
  • 将QGraphicsItem子类重写为QDeclarativeItem子类非常简单,值得付出努力.

源代码在这里.