使用QT平滑文本动画(Marquee文本效果)

时间:2009-10-30 22:10:53

标签: performance qt qt4 marquee

我有一个关于如何在不强大的硬件(Atom N270 + Intel 945GSM)上使用Qt 4.5.3平滑字形文本的问题。我的方法如下:

  1. 我将文字(36px Arial粗体)绘制到QPixmap(离屏绘画设备)
  2. 我设置了一个计时器,在每30ms内将1px内容向左移动。
  3. 当触发onTimer事件时,我选择了QPixmap并将此部分打印到窗口画布上。
  4. 一般来说,它移动顺畅。但是,我创建的字幕文本越多,它达到的CPU使用率就越高。当文本可以填充50%的屏幕(1920x1680)时,CPU使用率约为70-80%。文本动画变得有点闪烁。如果我将定时器间隔设置为50ms或更大,它将是平滑的。但文字移动太慢了。

    我的方法无效吗?我要用OpenGL吗?任何提示都是受欢迎的,并提前感谢^^)

1 个答案:

答案 0 :(得分:6)

您应该查看Graphics View框架。您可以将QGraphicsTextItem对象添加到QGraphicsScene,并设置视图的坐标(缩放和平移)以使文本移动并显示您想要的任何大小,包括将某些文本设置为“屏幕外”(在视图外) 。我希望这比每次定时事件复制和绘制QPixmap的(不同大小)部分更有效。

该文档指出Graphics View框架已经过优化,可以同时处理多个对象。如果结果不是更好,你可能想试试4.6 beta。图形视图渲染有优化。

顺便说一下,我会看看QTimeLine帮助你驾驶动画。除了经常提供基本的“滴答”之外,您还可以设置“曲线形状”,它们可以开始缓慢和加速,或者随着结束的进行而减速。请注意,如果要在finished()信号之后重新启动QTimeLine,如果更改持续时间并调用start()而不调用setCurrentTime(0),则计时器将以旧持续时间作为当前时间开始。