qt 使用QMovie播放动画

本文详细介绍了Qt中QMovie类的使用方法,包括如何播放GIF和MNG格式的动画文件,以及如何控制动画的播放、暂停和停止等功能。此外还提供了关于动画帧计数、缓存模式设置及速度调整等方面的实用代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

《Qt Creator快速入门》13.2章节,摘录如下:

前面已经多次提到过QMovie类,QMovie类是一个使用QImageReader来播放动画的便捷类。该类用来显示没有声音的简单动画,主要支持GIF和MNG格式的文件,其支持的格式可以使用QMovie::supportedFormats()静态函数来获取。要播放一个动画,只需要先创建一个QMovie对象,并为其指定播放的动画文件,然后将QMovie对象传递给QLabel::setMovie()函数,最后调用start()函数来开始播放动画。

QLabel label;

QMovie *movie = new QMovie("animations/fire.gif);

label->setMovie(movie);

movie->start();

还可以使用setPaused(true)来暂停动画的播放,然后使用setPaused(false)来恢复播放;使用stop()函数可以停止动画的播放。QMovie一共有3个状态,如表13-2所列,每当状态改变时都会发射stateChanged()信号,一般可以关联这个信号来改变播放、暂停等按钮的状态。

可以使用frameCount()函数来获取当前动画总的帧数;currentFrameNumber()函数可以返回当前帧的序列号,动画第一个帧的序列号为0;如果动画播放到了一个新的帧,QMovie会发射updated()信号,这时可以使用currentImage()或者currentPixmap()函数来获取当前帧的一个副本。还可以使用setCacheMode()来设置QMovie的缓存模式,这里有两个选 项:QMovie::CacheNone和QMovie::CacheAll选项,那么就可以使用jumpToFrame()来跳转到指定的帧了。另外,还可以使用setSpeed()来设置动画的播放速度,该速度是以原速度的百分比来衡量的,默认的速度为100%。

 

问题记录:

a.有时frameCount获取到的值为0,但能正常播放。所以在更新slider (表示帧运行的位置)的位置时,需要做判断。

 

 bool hasFrames = (movie->currentFrameNumber() >= 0);

     if (hasFrames) {
         if (movie->frameCount() > 0) {
             frameSlider->setMaximum(movie->frameCount() - 1);
         } else {
             if (movie->currentFrameNumber() > frameSlider->maximum())
                 frameSlider->setMaximum(movie->currentFrameNumber());
         }
         frameSlider->setValue(movie->currentFrameNumber());
     } else {
         frameSlider->setMaximum(0);
     }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值