ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【Qt】使用QMovie加载Gif动画

2022-05-09 23:03:16  阅读:157  来源: 互联网

标签:动画 调用 Qt gif Gif QMovie setCacheMode


一、QMovie简介

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

​ 通过将文件名称或指向QIODevice的指针传递给QMovie的构造函数即可创建QMovie对象。QIODevice包含动画图像格式。在开始动画之前,可以调用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()设置动画速度。

三、一个简单的Gif动画加载示例效果

请添加图片描述

四、总结

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

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

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


您的点赞和关注,是我持续创作的动力。

搜索关注【嵌入式小生】wx公众号回复关键字【1002】即可获取本文的源码工程,也可获取更多精彩内容。
image

标签:动画,调用,Qt,gif,Gif,QMovie,setCacheMode
来源: https://www.cnblogs.com/iriczhao/p/16251436.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有