• 4742阅读
  • 6回复

[提问]为啥QT跑马灯不流畅? [复制链接]

上一主题 下一主题
离线lostc
 
只看楼主 倒序阅读 楼主  发表于: 2012-04-23
环境:界面上有两个QLabel 在按照一定的时间切换背景图片,底部字幕跑马灯
描述:在图片切换背景图片的时候,跑马灯会暂时停顿,图片切换完了,跑马灯才会重新开始移动。照成的直接后果就是跑马灯不流畅,一卡一卡的
          有分析了下,以为跑马灯和QLabel切换图片都在Gui线程里,在切换图片的时候,会暂停消息队列的分发,等绘图完毕,才返回消息循环。不知  道是不是这个原因,有做过相关内容的大牛,帮我分析分析
离线xuweistudy
只看该作者 1楼 发表于: 2012-04-23
QCoreApplication::processEvents();

Processes all pending events for the calling thread according to the specified flags until there are no more events to process.
You can call this function occasionally when your program is busy performing a long operation (e.g. copying a file).
离线lostc
只看该作者 2楼 发表于: 2012-04-23
回 1楼(xuweistudy) 的帖子
我切换图片是通过Painter 在PaintEvent()里面切换的,我试过你说的这个方法,但是会报
QPainter::begin:   A   paint   device   can   only   be   painted   by   one   painter   at   a   time 这个东西,然后图片绘制不出来。
离线xuweistudy
只看该作者 3楼 发表于: 2012-04-23
你直接label->setPixmap()来更换背景呢!
离线lostc
只看该作者 4楼 发表于: 2012-04-23
回 3楼(xuweistudy) 的帖子
setPixmap经过测试比用我现在的这种方式要慢上许多,尤其是在图片比较大的时候
离线xuweistudy
只看该作者 5楼 发表于: 2012-04-24

static const QPixmap px("xxx.png");//把图片保存成内存数据,不要每次去读磁盘,这样试试!

(背景图片也要跑马吗?,不要的话就没必要在跑马时改变它的背景图片,你可以把它放在widget里,改变widget的背景)
离线lostc
只看该作者 6楼 发表于: 2012-04-24
回 5楼(xuweistudy) 的帖子
嗯 我是把图片缓存起来的,同一张图片第一次会从文件系统加载成QPixmap对象,后面就直接用这个对象了。
另外 我这个程序界面上是有 QLabel专门显示图片,底下就是一行跑马灯了,图片和字幕 是同时在运行的,现在就是发现图片的切换(也就是QLabel设置背景图片)的时候,字幕跑马灯会一卡一卡的,对字幕影响很大!
快速回复
限100 字节
 
上一个 下一个