Qt 中,静态图片 PNG,JPG 等可以用其创建 QPixmap,调用 QLabel::setPixmap() 来显示,但是能够具有动画的 GIF 却不能这么做,要在 QLabel 上显示 GIF,需要借助 QMovie 来实现。

QLabel 显示 GIF

使用 GIF 图片的路径创建 QMovie 对象,并且调用 QMovie::start() 启动 GIF 动画,然后通过 QLabel::setMovie() 设置好动画对象后,就能在 QLabel 上看到 GIF 动画了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <QApplication>
#include <QMovie>
#include <QLabel>
 
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
 
QLabel *label = new QLabel();
QMovie *movie = new QMovie("/Users/Biao/Desktop/x.gif");
label->setMovie(movie); // 1. 设置要显示的 GIF 动画图片
movie->start(); // 2. 启动动画
label->show();
 
return app.exec();
}

控制 GIF 动画循环次数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <QApplication>
#include <QMovie>
#include <QLabel>
 
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
 
QLabel *label = new QLabel();
QMovie *movie = new QMovie("/Users/Biao/Desktop/x.gif");
label->setMovie(movie); // 1. 设置要显示的 GIF 动画图片
movie->start(); // 2. 启动动画
label->show();
 
QObject::connect(movie, &QMovie::frameChanged, [=](int frameNumber) {
// GIF 动画执行一次就结束
if (frameNumber == movie->frameCount() - 1) {
movie->stop();
}
});
 
return app.exec();
}

如果查看 QMovie API,会发现 QMovie::loopCount() 能够返回 GIF 动画的循环次数,但是这个次数是创建 GIF 时设置的次数,QMovie 没有提供 API 来设置动画循环的次数,不过我们可以监听动画执行时的 frameChanged 信号,如果当前帧是 GIF 的最后一帧时则说明一次动画播放完成,需要停止动画播放时调用 QMovie::stop() 即可。上面的例子中 GIF 动画执行完一次的时候就停止,如果需要执行完 3 次时才停止,应该怎么修改呢?

QMovie 中 GIF 动画帧的序号从 0 开始计数,例如共有 200 帧的 GIF 动画的最后一帧的下标是 199,QMovie::frameCount()返回 GIF 的帧数。

性能

QMovie 显示 GIF 的性能还是非常强劲的,在项目中显示一个 200 帧,50M 大小的 GIF,和显示普通的图片速度一样非常快,没有任何延迟的感觉,Mac 和 Windows 都测试过。

http://www.qtdebug.com/qt-gif/

Qt 显示 GIF的更多相关文章

  1. QT显示机制(7篇相关文章)

    了解QT显示机制,最重要的就是要了解QT是如何管理窗体的显示区域的,这里有个重要的类:QRegion, 在QT中可以通过QRegion定义一个窗体的显示区域,也可以通过QRegion定义窗体的可修改区 ...

  2. Qt显示调用vs中的dll

    网上看到很多文章写调用vc的dll,但我尝试了总是出问题,下面结合参考别人的文章,实现了Qt显示调用vs中c接口的dll. 具体直接上代码: vs中的代码: TMax.h: #ifdef TMAX # ...

  3. QT显示url图片

    QT 显示网络图片我目前的办法就是先下载下来 然后显示  如果有好的办法请相互交流一下 需要调用的头文件 #include <QNetworkAccessManager> #include ...

  4. 15、USB摄像头图片采集+QT显示

    一.Qt的下载和的安装 关于Qt的安装,网络上有很详细的介绍.这里只做简单介绍. 需要的安装包一共有两个:Qt Creator 和QTE. 1)QT Creator 下载地址:qt-sdk-linux ...

  5. 嵌入式qt显示中文和隐藏鼠标

    最近项目快接近尾声了,要把项目移植到板子上,但是板子上的系统没有安装字库,导致中文无法显示,并且有一个很讨厌的鼠标光标(又没有鼠标),上网找了一些解决方案,记录一下 qt显示中文: 如果你急于在ARM ...

  6. QT显示中文的几个问题

    最近用QT,需要在界面上显示中文,发现QT无法直接在代码中写中文,只能通过曲线救国的方式,比如用QT语言家,QTextCodec的fromloca8bit 研究了半天,终于明白了一些编码的问题 1.V ...

  7. Qt 显示图片 放大 缩小 移动(都是QT直接提供的功能)

    本文章原创于www.yafeilinux.com 转载请注明出处. 现在我们来实现在窗口上显示图片,并学习怎样将图片进行平移,缩放,旋转和扭曲.这里我们是利用QPixmap类来实现图片显示的. 一.利 ...

  8. Qt 显示透明flash和编写QtWebkit插件

    Qt 有两种方法可以显示flash. 1. 通过QAxWidget 调用com形式显示flash, 需要本机安装IE flash插件 2. 直接通过qwebview显示flash, 需要下载webki ...

  9. QT显示GIF图片

    在QT中要显示GIF图片,不能通过单单的添加部件来完成. 还需要手动的编写程序. 工具:QT Creator 新建一个工程,我们先在designer中,添加一个QLabel部件. 如下图: 将QLab ...

  10. 我写的一个 Qt 显示图片的控件

    Qt 中没有专门显示图片的控件.通常我们会使用QLabel来显示图片.可是QLabel 显示图片的能力还是有点弱.比方不支持图像的缩放一类的功能.使用起来不是非常方便. 因此我就自己写了个简单的类. ...

随机推荐

  1. Windows Phone 8.1 后台任务

    Windows Phone 8.1 应用可以添加多个后台任务,以辅助应用完成某些任务. (1)新建前台应用 后台任务是依托于前台应用的,所以必须拥有一个前台应用. 该前台应用的功能很简单,就是读取文件 ...

  2. 【2001】关于N!的问题

    Time Limit: 3 second Memory Limit: 2 MB 编写程序,计算n!以十进制数形式表示的数中最右边一个非零数字,并找出在它右边有几个零. 例如:12!=1*2*3*4*5 ...

  3. listener监听器笔记

    listener:三个域对象的监听器,,还有属性的变化. 监听三个域对象的创建和销毁:servletContextListenerservletRequestListenerservletsessio ...

  4. Yii学习笔记之四(表单验证 api 翻译)

    1.表单验证 对于用户输入的全部数据,你不能信任,必须加以验证. 全部框架如此.对于yii 能够使用函数  yii\base\Model::validate()  进行验证 他会返回boolean值的 ...

  5. 基于 Android NDK 的学习之旅-----资源释放

    做上一个项目的时候因为与C引擎交互频繁,有时候会突然莫名其妙的的整个应用程序直接挂掉.因为我是学Java 开始的,所以对主动释放内存没多大概念(GC直接帮忙回收),后查询原因才知道是因为JNI 有些对 ...

  6. mui监听多个下拉刷新当前处于哪个选项卡

    1.滑动触发 <div id="slider" class="mui-slider mui-fullscreen"> <div id=&quo ...

  7. thinkphp5如何使用ajax(变化的核心,也就是ajax作用的核心是什么)

    thinkphp5如何使用ajax(变化的核心,也就是ajax作用的核心是什么) 一.总结 一句话总结:ajax的核心在于页面的不刷新而获取后台数据,所以后台的操作还是一样(获取参数,返回数据),只是 ...

  8. js调用百度地图api

    <!DOCTYPE html> <html>     <head>         <meta charset="UTF-8">   ...

  9. 版本控制(1)——SVN

    一.工具下载 下载SVN: http://subversion.apache.org/ 我们选择Windows系统中的可视化的VisualSVN 如下图,左边是客户端,右边是服务器端,我们下载服务器端 ...

  10. 一起学Python:字典介绍

    字典介绍 想一想: 如果有列表 nameList = ['xiaoZhang', 'xiaoWang', 'xiaoLi']; 需要对"xiaoWang"这个名字写错了,通过代码修 ...