我有一个基于QML的Qt UI应用程序,可播放音频。该应用程序是使用Qt 4.x开发的,并且在所有QML文件中都有import QtQuick 1.0
个语句。我尝试通过派生QDeclarativeItem
类并实现paint(QPainter *)
函数来计算应用程序的FPS。 FPS大约是60.
稍后,我移植了相同的应用程序以使用QtQuick 2.0
。它在QML文件中包含import QtQuick 2.0
个语句,并使用QtQuick 2.0
运行应用程序所需的一些其他更改。同样,我尝试通过派生QQuickPaintedItem
并实现paint(QPainter *painter)
函数来计算应用程序的FPS。计算出的FPS也是60左右。
我预计基于QtQuick 1.0的第一个应用程序与第二个应用程序相比具有更低的FPS。但是,事实并非如此。这种行为有望吗?我的应用程序中没有任何OpenGL调用。该应用程序只有正常的QML组件,如Rectangle, Item, Image
。
我的FPS计算方法基于另一个线程Show FPS in QML
中的解决方案答案 0 :(得分:0)
使动画看起来平滑的最佳FPS为60。同样,大多数典型显示器的刷新率为60 HZ。
因此,理想的FPS为60或更多是浪费的。因此,大多数UI框架将FPS限制为60(more info about vsync
)。
但是要使之成为可能,应用必须在每个渲染之间的〜16ms内完成其工作(1000ms / 60fps〜= 16ms)。换句话说,如果应用程序运行动画并绑定某些东西并计算方程式等,则应用程序必须在16ms内完成它们。否则,用户将丢帧,从而导致跳帧。
QtQuick 2闪耀在这里!因为它使用了一些优雅的技术,例如多线程UI,JIT,QMLCompiler等,并使用优化的C ++代码进行了增强。
结果是,使用QtQuick 2制作的应用将更加流畅和流畅。