4

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

  1. 我将文本(36px Arial 粗体)绘制到 QPixmap(屏幕外绘制设备)上
  2. 我设置了一个计时器,每 30 毫秒向左移动 1px 的内容。
  3. 当 onTimer 事件被触发时,我选择 QPixmap 并将这部分打印到窗口画布上。

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

我的方法无效吗?我应该使用 OpenGL 吗?欢迎任何提示,并提前感谢^^)

4

1 回答 1

6

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

该文档指出,图形视图框架经过优化,可以一次处理多个对象。如果结果不是更好,您可能想尝试 4.6 测试版。图形视图渲染即将进行优化。

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

于 2009-11-02T16:18:01.563 回答