当前位置: 代码迷 >> QT开发 >> QTimer 20ms执行一次paintevent的有关问题
  详细解决方案

QTimer 20ms执行一次paintevent的有关问题

热度:251   发布时间:2016-04-25 03:16:15.0
QTimer 20ms执行一次paintevent的问题
linux下用QTimer实现文字滚动,
比如20ms重绘一次(paintevent),在里面左移坐标后重新绘制(drawText),

可是实际画出来的效果是一卡一卡的,滚动慢且不流畅,绝不是20ms移动一次。

有想法的帮帮忙。
------解决方案--------------------
卡顿的话,首先检查你的paint动作是不是比较耗时。另外QTimer并不能保证20ms的时间间隔。
------解决方案--------------------
首先跟定时器精度有关,定时器不一定是 20 毫秒出发一次。
其次和你计算的位置以及文本绘制过程有关,你是不是清空了整个 widget ,画背景,然后再绘制文本?
建议使用一个 QLabel,然后使用 Qt 的动画框架中的QPropertyAnimation ,这样你只需要设置一些属性,别的就什么都不用管了。
------解决方案--------------------
1. QTimer不是个很精确的东西。20ms精度很可能达不到要求:
http://blog.csdn.net/dijunfeng/article/details/7272475
2. QTimer的update依赖于消息循环。如果消息循环执行一轮的时间很长(比如说100ms),那么你的timer至少是100ms执行一次。你有没有干了什么阻塞消息循环的事情?
3. 文字滚动用QLabel左右移动就可以了,为什么要重绘?
------解决方案--------------------
给个建议,使用QTest::qWait(20)也许是个不错的方式。
------解决方案--------------------
引用:
给个建议,使用QTest::qWait(20)也许是个不错的方式。


任何时候在程序内使用QTest都是不对的 (当然,写测试程序除外)
------解决方案--------------------
引用:
找到慢的原因是:给滚动用的窗口指定父窗口就会慢,不流畅。
不给文字滚动用的窗口指定父窗口的话,就相对流畅了。。

那可能是滚动文字会不断出发父窗口重绘?按理电脑上重绘也应该花不了多长时间呀。

---------------------------
博文决赛,投我一票,谢谢。
------解决方案--------------------
子窗口遮住了父窗口,子窗口运动,你说父窗口是否要刷新?不刷新残影情何以堪?
别忘了给我投票啊