【Qt】 使用QMovie加载Gif动画
创始人
2025-05-31 05:03:41
0

一、QMovie简介

​ QMovie类用于显示没有声音的简单动画。在实际运用中,可以用来显示Gif格式的动画。

调用isValid()来检查图像数据是否有效
调用start()来开始动画。

此后QMovie将进入运行状态,并发出started()和stateChanged()信号。可以调用state()获取影片的当前状态。

​ 每当动画中有新的帧可以使用时,QMovie将发出updated()信号。如果帧的大小改变,则会触发resize()信号。可以调用currentImage()或currentPixmap()来获得当前帧的副本。当动画播放完成时,QMovie会发出finished()信号。如果在回放过程中出现任何错误(即图像文件损坏),QMovie将发出error()信号。
 

 可以通过调用setSpeed()来控制动画播放的速度,它以原始速度的百分比作为参数。通过调用setPaused(true)来暂停电影。此后QMovie将进入暂停状态并发出stateChanged()信号。如果调用setPaused(false), QMovie将重新进入运行状态并再次开始动画。如果要停止电影,调用stop()。
 

某些动画格式允许设置背景颜色。可以调用setBackgroundColor()来设置颜色,或者调用backgroundColor()来检索当前的背景颜色。

​ currentFrameNumber()返回当前帧的序列号。动画中的第一个帧的序列号是0。frameCount()返回动画中的帧总数,如果图像格式支持的话。可以调用loopCount()来获得影片在结束前应该循环的次数。nextFrameDelay()返回当前帧应该显示的毫秒数。
​ QMovie可以通过调用setCacheMode()来缓存动画帧。

二、QMovie使用方法
(2-1)代码实例
    QMovie *movie1 = new    QMovie(":/ProgressBar_3.gif");
    ui->label->resize(666,309);
    ui->label->setMovie(movie1);

​ 注意:以上方法是通过QLabel进行gif动画加载的,所以需要设置QLabel的大小,这样才会显示完整的gif图片。

(2-2)缓存所有动画帧
​ 如果需要进行gif动画帧的跳转、速度控制等操作,还需要使用setCacheMode来指明gif的加载方式。默认是不会缓存所有的gif动画帧的。所以需要设置为:

    movie1->setCacheMode(QMovie::CacheAll);
​ 此后便可以使用jumpToFrame()跳转gif动画帧;使用frameCount()获取gif动画帧的总数;使用setSpeed()设置动画速度。
 

四、总结
QMovie类使用还是比较简单,主要需要注意以下两点:

(1)使用QLabel的setMovie()呈现gif动画,注意根据Gif动画的大小设置QLabel的大小,确保动画完整显示。

(2)使用setCacheMode来缓存gif动画帧,否则用于动画帧操作的相关函数(例如:jumpToFrame())将无效。
 

相关内容

热门资讯

《中华人民共和国监察法实施条例... 央视网消息:中华人民共和国国家监察委员会发布公告(第2号),《中华人民共和国监察法实施条例》已经20...
gRPC(一) 一、RPC基本概念 RPC:远程过程调用,它是一种通过网络从远程计算机程...
C++stoi、stol、st... stoi()函数#include int stoi(const std::string& str, ...
有两个以上的USB设备,他们的... 如果有两个以上的USB设备,他们的Vendor ID和Product ID都一样&#x...
基于Spring Cloud集... 记录:386场景:在nacos中集中管理微服务配置,微服务...
MySQL注入秘籍【绕过篇】 MySQL注入秘籍【绕过篇】1.通用方法2.绕过空格3.绕过引号4.绕过逗号,5.绕过等号=...
代码随想录之二叉树2(力扣题号... 654 最大二叉树 这题把递归都说好了,比重建二叉树更简单 /*** Defin...
人民银行吉安市分行开展《存款保... 近日,人民银行吉安市分行以“存保十载 护航万家”为主题,组织开展一系列形式新颖、覆盖广泛的宣传活动,...
Kubernetes 存储St... StorageClass 前面的文章中我们学习了 PV 和 PVC 的使用方法,但是前...
【五】springboot启动... onRefresh 源码解析 Initialize other special beans in ...