1.简述

界面中需要用动图展示状态,打算使用QMovie播放,QLabel->setMovie();
就是一下方法。


不过UI给的gif效果很糊,远没给的png清楚。

查了资料说gif的标准只支持256色,也就是说png图片里的rgb1600万全彩被压缩了。自然也就失真了。所以播放gif达不到目标效果。

只能用多个png图片刷新来实现动效展示。

效果对比
上图是直接播放gif的效果,下图是逐帧刷新的效果

2.代码

用法示例

实现

CWidgetAE.cpp

#include "CWidgetAE.h"
#include <QDir>
#include <QDebug>CWidgetAE::CWidgetAE(QString strImgDir, QWidget *parent): QWidget(parent)
{setImgDir(strImgDir);
}void CWidgetAE::setImgDir(QString strImgDir)
{if(m_strImgDir == strImgDir)return ;elsem_strImgDir = strImgDir;stopAE();QDir tmpDir(m_strImgDir);QFileInfoList listInfo = tmpDir.entryInfoList(QDir::Files|QDir::Dirs|QDir::NoDotAndDotDot,QDir::Name);if(listInfo.isEmpty()){qWarning()<<"AE Dir is Empty!";return ;}m_strListImg.clear();foreach(QFileInfo strFileInfo,listInfo){m_strListImg.append(strFileInfo.filePath());}this->resize(QImage(m_strListImg.first()).size());this->show();startAE();
}void CWidgetAE::closeAE()
{m_strImgDir = "";stopAE();this->hide();
}void CWidgetAE::stopAE()
{if(0 == m_nTimerId)return ;killTimer(m_nTimerId);m_nTimerId = 0;
}void CWidgetAE::paintEvent(QPaintEvent *event)
{Q_UNUSED(event)if(m_nIndex > (m_strListImg.size() - 1))return ;QPainter painter(this);painter.drawImage(QPointF(0,0),QImage(m_strListImg[m_nIndex]));m_nIndex++;m_nIndex = (m_nIndex)%m_strListImg.size();
}void CWidgetAE::timerEvent(QTimerEvent *event)
{Q_UNUSED(event)this->update();
}

CWidgetAE.h

#ifndef CWIDGETAE_H
#define CWIDGETAE_H#include <QWidget>
#include <QPaintEvent>
#include <QPainter>
#include <QTimer>class CWidgetAE : public QWidget
{Q_OBJECT
public:explicit CWidgetAE(QString strImgDir,QWidget *parent = nullptr);void setImgDir(QString strImgDir); //传入图片文件夹路径  就会自动开始播放 50ms刷一帧void closeAE(); //关闭动画显示  停止刷新
private:void startAE(){m_nTimerId = startTimer(50);}void stopAE();
protected:void paintEvent(QPaintEvent *event);void timerEvent(QTimerEvent *event);
private:QTimer *m_pTimer = nullptr;QString m_strImgDir = "";QStringList m_strListImg;int m_nIndex = 0;int m_nTimerId = 0;
};#endif // CWIDGETAE_H

Qt 动图 播放png阵列 避免使用gif导致失真相关推荐

  1. 推荐一款Android Gif动图播放框架android-gif-drawabl

    引用包 dependencies {implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.16' } 使用 GifImageVie ...

  2. 用Python编写录屏程序将播放的视频用截屏方法转换为多帧图像编辑后保存为GIF格式动图文件

    有时编写游戏后发博文,为使读者有一个直观的游戏效果,会把游戏运行动画转换GIF格式动图发到博文中.本文介绍如何用python PIL库ImageGrab.grab()函数截屏,编写录屏程序,将视频转换 ...

  3. android系统设置动态壁纸,安卓教程:设置GIF动图为手机壁纸

    不禁是一把泪,连设置GIF动态图为壁纸都可以做成教程了,小编你是有多缺文章素材啊?嗯,即便如此,在Android平台上,可是有很多同学为图动不动的问题而苦恼.所以,这篇教程就出来了. 前言:实现GIF ...

  4. QT:利用计时器连续播放图片组成动图效果

    一.效果展示 (该动图完全由jpg图片连续播放构成) 二.步骤(代码解释+注意问题) 1. 配置头文件 头文件我就直接上代码了 #ifndef DIALOG_H #define DIALOG_H#in ...

  5. Qt基于定时器实现简单动图展示(2例)

    目录 总体概述 (1)总体介绍 (2)素材获得途径 (3)通用函数介绍 ①绘图函数 ②定时器事件 第一例:单一动图展示 第二例:分组动图展示 总体概述 (1)总体介绍 动图展示主要是将已有的动图逐帧图 ...

  6. Qt实现 QLabel显示文本与图片、动图

    QLabel概念: 在Qt中,QLabel类用于文本或图片(包括动图gif).视频的显示,并不提供用户交互功能, 如果需要交互,比如响应鼠标事件,根据面向对象的里氏替换原则,子类必须能够替换它们的父类 ...

  7. Qt Quick实现局域网聊天V4版本(支持GIF动图表情包、消息聊天、拖动缩放窗口、支持Linux编译)

    Qt Quick实现局域网聊天V4版本(支持GIF动图表情包.消息聊天.拖动缩放窗口.支持Linux编译) 随着社交网络的普及,人们的聊天方式也变得更加高效和便捷.在这里,我们将利用Qt Quick构 ...

  8. html gif循环播放,Easy GIF Animator 7设置gif动图循环播放次数的方法

    gif动态图在我们的生活中是十分常见的,很多小伙伴们在使用聊天工具的时候都会使用一些 动态的表情包,这些表情包文件给我们的了解增加了很多的乐趣.不知道大家在使用这些表情包的时候是否有发现这样的一种情况 ...

  9. 如何用Qt展示你的GIF动图

    如果想用Qt把喜欢的GIF动图贴在对话框里,我们应该怎么做呢? 首先你可以使用软件Ulead Gif Animator 按帧保存你看中的动图,或者自己亲手制作一个GIf动图的每一帧图片.然后把这些图片 ...

  10. OLED上播放动图的一种笨方法

    声明:本文章纯属学习研究,之所以使用这个素材,一是觉着好玩,二是在这个动图中,人物的动作比较大,这样子效果比较好.没有冒犯他人之意. 再者,文章若有侵权请联系本人进行删除. 工具:硬件:STC8A8K ...

最新文章

  1. Android Fragment add/replace以及backstack
  2. 如何在XSLT里调用C#的代码
  3. 循环体内,字符串的连接方式,使用StringBuilder的append方法进行扩展
  4. 想红想疯了?人民日报怒批女主播进教室摆拍:如此装束 成何体统
  5. Excel-基本操作
  6. python约瑟夫环算法和流程图_约瑟夫环问题及python与c++实现效率对比
  7. JAVA构造方法与构造方法的执行原理简单理解(栈与堆)
  8. redis php 使用实例
  9. Mipmap与纹理过滤
  10. 统考计算机u盘禁用,四个轻松解除电脑禁用U盘的方法
  11. 使用python调用微步在线接口实现自动化查询IP情报
  12. linux的input命令,Linux(Ubuntu)下如何修改鼠标速度——”xinput”命令使用方法
  13. C++入门(六)之String
  14. 惊!用python将数据存到txt文件中发现顺序乱排或缺斤少两
  15. codeup21691 买小猫小狗
  16. 【摘自csdn】一场我没有看懂的相亲
  17. 多传感器融合的SLAM综述
  18. 移动端和pc端的区别
  19. 红米5 plus 位置服务器,红米5 Plus解锁system系统分区的教程_红米5Plus解系统分区...
  20. Sql Server 里的向上取整、向下取整、四舍五入取整的实例!

热门文章

  1. CF1399A Remove Smallest
  2. [数论]莫比乌斯反演入门
  3. vgcreate 创建卷组
  4. java response 输出word_java导出数据到word(一)
  5. mysql awk_awk 实用实例参考
  6. pythonnumpy算术函数_python的numpy.prod函数运行实例详解
  7. 求和函数计算机语言,在 Excel 中,计算求和的函数是 ____。
  8. 自动获取服务器,c#-自动获取服务器IP到客户端
  9. Dart教程(一):dart安装
  10. 万恶之源-python基本数据类型