现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

Qt编程:使用QMovie播放动画

2014-08-31 18:21 工业·编程 ⁄ 共 1196字 ⁄ 字号 暂无评论

前面已经多次提到过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); }

给我留言

留言无头像?