一、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动画相关推荐

  1. Qt 使用QMovie加载gif图片实现动态等待窗口

    有时候要进行某项后台处理,但后台处理时间很长,需要提示用户等待,不妨做一个动态等待窗口.具体实现过程如下: 1 自定义窗口类DlgWait (1) 在资源中添加动态的gif图片,记住它的大小. 我添加 ...

  2. WPF 加载等待动画

    WPF 加载等待动画 原文:WPF 加载等待动画 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/qq_29844879/article/detail ...

  3. ios 旋转加载gif_加载GIF动画方法 iOS

    方法一 使用UIWebView _codeStr为gif网址      如果是本地的gif可以直接使用dataWithContentsOfFile方法 NSData *data = [NSData d ...

  4. CSharpGL(50)使用Assimp加载骨骼动画

    CSharpGL(50)使用Assimp加载骨骼动画 在(http://ogldev.atspace.co.uk/www/tutorial38/tutorial38.html)介绍了C++用Asism ...

  5. html 载入中,用纯CSS实现加载中动画效果

    今天要介绍的是用简单的CSS--只用CSS,不用Gif--制作"加载中-"动画效果.先看看效果: 上面的这个加载中效果,以前是用gif动图实现的,但随着CSS的进步,CSS动画功能 ...

  6. 加载数据时,页面显示正在加载的动画,支持移动端

    最近在使用ionic3做一个移动端APP,在用户网络环境差的时候,查询数据会比较慢,这个时候需要模拟其他成熟的APP给页面上加入一个加载的动画.由于一开始我不知道ionic3本身已经提供了一套组件,所 ...

  7. android刷新时的圆形动画_Android自定义加载圈动画效果

    本文实例为大家分享了Android自定义加载圈动画展示的具体代码,供大家参考,具体内容如下 实现如下效果: 该效果图主要有3个动画: 1.旋转动画 2.聚合动画 3.扩散动画 以上3个动画都是通过Va ...

  8. WBLoadingIndicatorView(加载等待动画)

    中文说明 基于CALayer封装加载等待动画,目前支持6种类型动画: typedef NS_ENUM(NSInteger, WBLoadingAnimationType) { WBLoadingAni ...

  9. html间隔代码_HTML+CSS基础入门开发,经典Loading加载缩放动画特效

    大家好,本篇文章分享经典Loading加载缩放动画特效,欢迎参考和指正. 效果图: Loading加载缩放动画特效 HTML代码: CSS代码: 知识点: animation:是CSS3的动画属性,这 ...

  10. PhP加载时显示动画,在ajax请求完之前的loading加载的动画效果实现

    这篇文章给大家介绍的内容是关于在ajax请求完之前的loading加载的动画效果实现,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 很多时候我们需要引入框架来开发项目,这时我们可能会 ...

最新文章

  1. 北航计算机考研 跨考,过来人分享:给外校跨考北航同学的建议
  2. java使用stream将List转为Map
  3. canvas 插件_基于Angular的Canvas手写签名插件
  4. 苏炳添:发C刊与拿冠军相比,哪个更难?
  5. 谈谈大型分布式网站架构技术总结
  6. 如何让ClickOnce进行手动更新(含代码)
  7. python集成学习算法_python: 一句话说机器学习算法和调参-集成学习篇
  8. 数学基础知识总结 —— 4. 常见函数图像
  9. 浅谈欧奈尔对利弗莫尔的继承和发扬
  10. ABP VNext纯洁版项目模板
  11. go get xxx timeout
  12. 1.1 创造性和动机
  13. 计算机学业水平测试初中生操作题,初中学业水平考试信息技术考试操作题常见题型及作答方法...
  14. Filebeat is unable to load the Ingest Node pipelines for the configured modules
  15. ensp系统服务器是哪个,ensp主机和服务器配置
  16. win11本地用户和组找不到的解决办法
  17. JavaScript的学习8——underscore
  18. 我的typescript学习心得
  19. VTK:数据动画用法实战
  20. 中断深入-->休眠唤醒(通用)

热门文章

  1. MAC苹果电脑装单win10系统
  2. TCP与UDP的区别
  3. 单元测试报告软件测试,软件单元测试报告-模板
  4. 30本互联网相关的电子书
  5. React 时间控件
  6. 黑马redis实战-秒杀页面
  7. 在3dmax中打开文件时,显示路径无效,如何处理?
  8. linux系统添加中文字体后不生效
  9. python安装什么版本比较好_安装好python之后 python哪个版本最好用
  10. 信息学奥赛一本通1011