【Qt】 使用QMovie加载Gif动画
一、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】即可获取本文的源码工程,也可获取更多精彩内容。
【Qt】 使用QMovie加载Gif动画相关推荐
- Qt 使用QMovie加载gif图片实现动态等待窗口
有时候要进行某项后台处理,但后台处理时间很长,需要提示用户等待,不妨做一个动态等待窗口.具体实现过程如下: 1 自定义窗口类DlgWait (1) 在资源中添加动态的gif图片,记住它的大小. 我添加 ...
- WPF 加载等待动画
WPF 加载等待动画 原文:WPF 加载等待动画 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_29844879/article/detail ...
- ios 旋转加载gif_加载GIF动画方法 iOS
方法一 使用UIWebView _codeStr为gif网址 如果是本地的gif可以直接使用dataWithContentsOfFile方法 NSData *data = [NSData d ...
- CSharpGL(50)使用Assimp加载骨骼动画
CSharpGL(50)使用Assimp加载骨骼动画 在(http://ogldev.atspace.co.uk/www/tutorial38/tutorial38.html)介绍了C++用Asism ...
- html 载入中,用纯CSS实现加载中动画效果
今天要介绍的是用简单的CSS--只用CSS,不用Gif--制作"加载中-"动画效果.先看看效果: 上面的这个加载中效果,以前是用gif动图实现的,但随着CSS的进步,CSS动画功能 ...
- 加载数据时,页面显示正在加载的动画,支持移动端
最近在使用ionic3做一个移动端APP,在用户网络环境差的时候,查询数据会比较慢,这个时候需要模拟其他成熟的APP给页面上加入一个加载的动画.由于一开始我不知道ionic3本身已经提供了一套组件,所 ...
- android刷新时的圆形动画_Android自定义加载圈动画效果
本文实例为大家分享了Android自定义加载圈动画展示的具体代码,供大家参考,具体内容如下 实现如下效果: 该效果图主要有3个动画: 1.旋转动画 2.聚合动画 3.扩散动画 以上3个动画都是通过Va ...
- WBLoadingIndicatorView(加载等待动画)
中文说明 基于CALayer封装加载等待动画,目前支持6种类型动画: typedef NS_ENUM(NSInteger, WBLoadingAnimationType) { WBLoadingAni ...
- html间隔代码_HTML+CSS基础入门开发,经典Loading加载缩放动画特效
大家好,本篇文章分享经典Loading加载缩放动画特效,欢迎参考和指正. 效果图: Loading加载缩放动画特效 HTML代码: CSS代码: 知识点: animation:是CSS3的动画属性,这 ...
- PhP加载时显示动画,在ajax请求完之前的loading加载的动画效果实现
这篇文章给大家介绍的内容是关于在ajax请求完之前的loading加载的动画效果实现,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 很多时候我们需要引入框架来开发项目,这时我们可能会 ...
最新文章
- 北航计算机考研 跨考,过来人分享:给外校跨考北航同学的建议
- java使用stream将List转为Map
- canvas 插件_基于Angular的Canvas手写签名插件
- 苏炳添:发C刊与拿冠军相比,哪个更难?
- 谈谈大型分布式网站架构技术总结
- 如何让ClickOnce进行手动更新(含代码)
- python集成学习算法_python: 一句话说机器学习算法和调参-集成学习篇
- 数学基础知识总结 —— 4. 常见函数图像
- 浅谈欧奈尔对利弗莫尔的继承和发扬
- ABP VNext纯洁版项目模板
- go get xxx timeout
- 1.1 创造性和动机
- 计算机学业水平测试初中生操作题,初中学业水平考试信息技术考试操作题常见题型及作答方法...
- Filebeat is unable to load the Ingest Node pipelines for the configured modules
- ensp系统服务器是哪个,ensp主机和服务器配置
- win11本地用户和组找不到的解决办法
- JavaScript的学习8——underscore
- 我的typescript学习心得
- VTK:数据动画用法实战
- 中断深入-->休眠唤醒(通用)