比如20ms重绘一次(paintevent),在里面左移坐标后重新绘制(drawText),
可是实际画出来的效果是一卡一卡的,滚动慢且不流畅,绝不是20ms移动一次。
有想法的帮帮忙。
13 个解决方案
#1
卡顿的话,首先检查你的paint动作是不是比较耗时。另外QTimer并不能保证20ms的时间间隔。
#2
首先跟定时器精度有关,定时器不一定是 20 毫秒出发一次。
其次和你计算的位置以及文本绘制过程有关,你是不是清空了整个 widget ,画背景,然后再绘制文本?
建议使用一个 QLabel,然后使用 Qt 的动画框架中的QPropertyAnimation ,这样你只需要设置一些属性,别的就什么都不用管了。
其次和你计算的位置以及文本绘制过程有关,你是不是清空了整个 widget ,画背景,然后再绘制文本?
建议使用一个 QLabel,然后使用 Qt 的动画框架中的QPropertyAnimation ,这样你只需要设置一些属性,别的就什么都不用管了。
#3
paint动作大概需要20ms多一点,QTimer间隔20ms,实际画的时候间隔在400ms以上。
所以paint动作不是主要原因,应该是QTimer慢,而QTimer慢的原因也许是我程序的问题(因为我换个小程序就好一些,虽然保证不了20ms但不至于太卡顿。),
等我试试QPropertyAnimation 多谢
所以paint动作不是主要原因,应该是QTimer慢,而QTimer慢的原因也许是我程序的问题(因为我换个小程序就好一些,虽然保证不了20ms但不至于太卡顿。),
等我试试QPropertyAnimation 多谢
#4
1. QTimer不是个很精确的东西。20ms精度很可能达不到要求:
http://blog.csdn.net/dijunfeng/article/details/7272475
2. QTimer的update依赖于消息循环。如果消息循环执行一轮的时间很长(比如说100ms),那么你的timer至少是100ms执行一次。你有没有干了什么阻塞消息循环的事情?
3. 文字滚动用QLabel左右移动就可以了,为什么要重绘?
http://blog.csdn.net/dijunfeng/article/details/7272475
2. QTimer的update依赖于消息循环。如果消息循环执行一轮的时间很长(比如说100ms),那么你的timer至少是100ms执行一次。你有没有干了什么阻塞消息循环的事情?
3. 文字滚动用QLabel左右移动就可以了,为什么要重绘?
#5
目前还不知道是什么导致的堵塞,文字滚动用QLabel具体是?不用重绘?
#6
这个方法很好,在我PC上面实现了。
但是放到实机上就显示不出,原因不明。。
#7
纠正一下,实机不是显示不出来,是同样一卡一卡的滚动过去。。
#8
给个建议,使用QTest::qWait(20)也许是个不错的方式。
#9
给个建议,使用QTest::qWait(20)也许是个不错的方式。
任何时候在程序内使用QTest都是不对的 (当然,写测试程序除外)
#10
找到慢的原因是:给滚动用的窗口指定父窗口就会慢,不流畅。
不给文字滚动用的窗口指定父窗口的话,就相对流畅了。。
不给文字滚动用的窗口指定父窗口的话,就相对流畅了。。
#11
找到慢的原因是:给滚动用的窗口指定父窗口就会慢,不流畅。
不给文字滚动用的窗口指定父窗口的话,就相对流畅了。。
那可能是滚动文字会不断出发父窗口重绘?按理电脑上重绘也应该花不了多长时间呀。
---------------------------
博文决赛, 投我一票,谢谢。
#12
找到慢的原因是:给滚动用的窗口指定父窗口就会慢,不流畅。
不给文字滚动用的窗口指定父窗口的话,就相对流畅了。。
那可能是滚动文字会不断出发父窗口重绘?按理电脑上重绘也应该花不了多长时间呀。
---------------------------
博文决赛, 投我一票,谢谢。
果然如此,重绘函数里加载图片什么的处理太多,优化后好了。
问题是父窗口为什么会跟着重绘呢?
#13
子窗口遮住了父窗口,子窗口运动,你说父窗口是否要刷新?不刷新残影情何以堪?
别忘了给我投票啊
别忘了给我投票啊
#1
卡顿的话,首先检查你的paint动作是不是比较耗时。另外QTimer并不能保证20ms的时间间隔。
#2
首先跟定时器精度有关,定时器不一定是 20 毫秒出发一次。
其次和你计算的位置以及文本绘制过程有关,你是不是清空了整个 widget ,画背景,然后再绘制文本?
建议使用一个 QLabel,然后使用 Qt 的动画框架中的QPropertyAnimation ,这样你只需要设置一些属性,别的就什么都不用管了。
其次和你计算的位置以及文本绘制过程有关,你是不是清空了整个 widget ,画背景,然后再绘制文本?
建议使用一个 QLabel,然后使用 Qt 的动画框架中的QPropertyAnimation ,这样你只需要设置一些属性,别的就什么都不用管了。
#3
paint动作大概需要20ms多一点,QTimer间隔20ms,实际画的时候间隔在400ms以上。
所以paint动作不是主要原因,应该是QTimer慢,而QTimer慢的原因也许是我程序的问题(因为我换个小程序就好一些,虽然保证不了20ms但不至于太卡顿。),
等我试试QPropertyAnimation 多谢
所以paint动作不是主要原因,应该是QTimer慢,而QTimer慢的原因也许是我程序的问题(因为我换个小程序就好一些,虽然保证不了20ms但不至于太卡顿。),
等我试试QPropertyAnimation 多谢
#4
1. QTimer不是个很精确的东西。20ms精度很可能达不到要求:
http://blog.csdn.net/dijunfeng/article/details/7272475
2. QTimer的update依赖于消息循环。如果消息循环执行一轮的时间很长(比如说100ms),那么你的timer至少是100ms执行一次。你有没有干了什么阻塞消息循环的事情?
3. 文字滚动用QLabel左右移动就可以了,为什么要重绘?
http://blog.csdn.net/dijunfeng/article/details/7272475
2. QTimer的update依赖于消息循环。如果消息循环执行一轮的时间很长(比如说100ms),那么你的timer至少是100ms执行一次。你有没有干了什么阻塞消息循环的事情?
3. 文字滚动用QLabel左右移动就可以了,为什么要重绘?
#5
1. QTimer不是个很精确的东西。20ms精度很可能达不到要求:
http://blog.csdn.net/dijunfeng/article/details/7272475
2. QTimer的update依赖于消息循环。如果消息循环执行一轮的时间很长(比如说100ms),那么你的timer至少是100ms执行一次。你有没有干了什么阻塞消息循环的事情?
3. 文字滚动用QLabel左右移动就可以了,为什么要重绘?
目前还不知道是什么导致的堵塞,文字滚动用QLabel具体是?不用重绘?
#6
首先跟定时器精度有关,定时器不一定是 20 毫秒出发一次。
其次和你计算的位置以及文本绘制过程有关,你是不是清空了整个 widget ,画背景,然后再绘制文本?
建议使用一个 QLabel,然后使用 Qt 的动画框架中的QPropertyAnimation ,这样你只需要设置一些属性,别的就什么都不用管了。
这个方法很好,在我PC上面实现了。
但是放到实机上就显示不出,原因不明。。
#7
首先跟定时器精度有关,定时器不一定是 20 毫秒出发一次。
其次和你计算的位置以及文本绘制过程有关,你是不是清空了整个 widget ,画背景,然后再绘制文本?
建议使用一个 QLabel,然后使用 Qt 的动画框架中的QPropertyAnimation ,这样你只需要设置一些属性,别的就什么都不用管了。
这个方法很好,在我PC上面实现了。
但是放到实机上就显示不出,原因不明。。
纠正一下,实机不是显示不出来,是同样一卡一卡的滚动过去。。
#8
给个建议,使用QTest::qWait(20)也许是个不错的方式。
#9
给个建议,使用QTest::qWait(20)也许是个不错的方式。
任何时候在程序内使用QTest都是不对的 (当然,写测试程序除外)
#10
找到慢的原因是:给滚动用的窗口指定父窗口就会慢,不流畅。
不给文字滚动用的窗口指定父窗口的话,就相对流畅了。。
不给文字滚动用的窗口指定父窗口的话,就相对流畅了。。
#11
找到慢的原因是:给滚动用的窗口指定父窗口就会慢,不流畅。
不给文字滚动用的窗口指定父窗口的话,就相对流畅了。。
那可能是滚动文字会不断出发父窗口重绘?按理电脑上重绘也应该花不了多长时间呀。
---------------------------
博文决赛, 投我一票,谢谢。
#12
找到慢的原因是:给滚动用的窗口指定父窗口就会慢,不流畅。
不给文字滚动用的窗口指定父窗口的话,就相对流畅了。。
那可能是滚动文字会不断出发父窗口重绘?按理电脑上重绘也应该花不了多长时间呀。
---------------------------
博文决赛, 投我一票,谢谢。
果然如此,重绘函数里加载图片什么的处理太多,优化后好了。
问题是父窗口为什么会跟着重绘呢?
#13
子窗口遮住了父窗口,子窗口运动,你说父窗口是否要刷新?不刷新残影情何以堪?
别忘了给我投票啊
别忘了给我投票啊