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

sta*_*005 4 performance qt qt4 marquee

我有一个关于如何在非强大的硬件(Atom N270 + Intel 945GSM)上使字幕文本流畅(使用Qt 4.5.3)的问题.我的方法如下:

  1. 我将文本(36px Arial粗体)绘制到QPixmap(离屏绘制设备)上
  2. 我设置了一个计时器,每30ms将1px内容移到左边.
  3. 当触发onTimer事件时,我选择QPixmap并将此部件打印到窗口画布上.

一般来说,它移动顺畅.但是,我创建的字幕越多,其使用的CPU使用率就越高.当文本可以填充50%的屏幕(1920x1680)时,CPU使用率约为70-80%.文本动画变得有点闪烁.如果我将定时器间隔设置为50ms或更大,它将是平滑的.但文字移动太慢了.

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

Pat*_*ick 6

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

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

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