首页 > 编程语言 >qt程序实现多个图片连续显示效果像动画一样

qt程序实现多个图片连续显示效果像动画一样

时间:2022-11-29 23:32:17浏览次数:38  
标签:动画 qt 文件 程序实现 dll images event png Qt


qt学习也快一个月了,最近想做一个有趣的程序。效果是这样的:通过定时器连续显示几幅图片,串联起来看像是动的一样,我在网上找了几幅关于小鸡破壳而出那个有趣的场景,然后通过程序实现效果就是小鸡破壳而出。

五张图片如下:

qt程序实现多个图片连续显示效果像动画一样_资源文件

qt程序实现多个图片连续显示效果像动画一样_ico_02

qt程序实现多个图片连续显示效果像动画一样_ico_03

qt程序实现多个图片连续显示效果像动画一样_资源文件_04

qt程序实现多个图片连续显示效果像动画一样_#include_05

程序主要代码如下:

#include "shapewidget.h"
#include <QMouseEvent>
#include <QPainter>
#include <QPixmap>
#include <QBitmap>
ShapeWidget::ShapeWidget(QWidget *parent) : QWidget(parent)//构造函数的时候显示第一幅图片,并打开定时器
{
pix=new QPixmap();
pix->load(":/images/p1.png",0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither);
resize(pix->size());
setMask(QBitmap(pix->mask()));
count=1;
timer=new QTimer(this);
timer->start(500);
connect(timer,SIGNAL(timeout()),this,SLOT(changePicture()));//定时器溢出关联changePicture()函数
}
ShapeWidget::~ShapeWidget()
{
}
void ShapeWidget::changePicture()//使用switch语句根据情况选择不同的图片
{
QString picName;
count=count+1;
if(count>5) count=1;
switch(count)
{
case 1:picName=":/images/p1.png";break;
case 2:picName=":/images/p2.png";break;
case 3:picName=":/images/p3.png";break;
case 4:picName=":/images/p4.png";break;
case 5:picName=":/images/p5.png";break;
default:break;
}
pix->load(picName,0,Qt::AvoidDither|Qt::ThresholdDither|Qt::ThresholdAlphaDither);
resize(pix->size());
setMask(QBitmap(pix->mask()));//setMask()函数,图片之外透明部分都不显示
update(); //这句话还是挺重要的,不加和加有很大的区别
}
void ShapeWidget::mousePressEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton)
{
dragPosition =event->globalPos()-frameGeometry().topLeft();
event->accept();
}
if(event->button()==Qt::RightButton)
{
close();
}
}
void ShapeWidget::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons()&Qt::LeftButton)
{
move(event->globalPos()-dragPosition);
event->accept();
}
}
void ShapeWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawPixmap(0,0,*pix);
}


遇到的问题:

1、图片背景改为透明:

从网上下载的图片背景是白色的,于是用setMask()函数也没用,结果还是会将白色的背景显示出来,于是我用了可牛软件抠图的方法将图片中的对象截取出来了,保存一下为png结尾的文件,呵呵,小鸡的背景终于是透明的了,这下在程序里面可以用setMask()函数了,除了小鸡显示之外,其他窗体、背景什么都不会显示。

2、资源文件的添加:

文件-->新建文件或工程-->左下边选择Qt,右边选择Qt资源文件-->取名res,生成一个.qrc文件

在当前工程文件夹下添加图片资源/images/*.png之类的

然后你在这个资源文件里面添加前缀,之后添加文件。(前缀改为/,表示.qrc文件的当前目录,如需要引用images/p1.png采用":/images/p1.png")

资源文件的好处是你编译生成的可执行程序运行时不再需要那些图片资源文件。因为已经被编译成二进制编进可执行程序里面了

3、生成.exe文件更换图标

首先当然要准备一个.ico图标文件(假定为desktopIcon.ico,像素16*16,最好本身就是.icon结尾的文件,若不是,编译会提示找不到文件的错误),将其复制到工程目录当中(.pro文件所在的目录)。
然后在QT Creator中Ctrl+N或 File - New File or Project,选择General中的Text File,名称填写为.rc文件(如deskicon.rc),在里面只用写一行:

IDI_ICON1ICONDISCARDABLE"desktopIcon.ico"

编辑.pro文件,里面应该有:

OTHER_FILES+= \ qtdemo.rc 在其下再添加一行(如果没有上面的内容也没事):



RC_FILE = deskicon.rc

最后编译一下就好了,新生成的exe文件的图标就会变成desktopIcon.ico的样子

4、Qt应用程序发布

首先需要以release方式编译应用程序,将编译好的程序文件复制到发布文件夹。 
其次将以下动态链接库复制到发布文件夹中:mingwm10.dll、QtCore4.dll、QtGui4.dll。可以从“Qt安装目录\qt\bin”下面找到它们。 
如果用到了其他功能,如OpenGL,则需要将QtOpenGL4.dll也复制到发布文件夹中。 
如果应用程序有访问数据库的功能,则不仅要将QtSql4.dll复制到发布文件夹,而且还需要将对应的数据库驱动程序(同样也是dll)复制过来,放到“发布文件夹\sqldrivers”目录下面。可以从可以从“Qt安装目录\qt\plugins\sqldrivers”下面找到它们,如qsqlite4.dll。 
如果应用程序含有中文,还需要在发布文件夹下面建立codecs目录,并将“Qt安装目录\qt\plugins\codecs”目录下面的qcncodecs4.dll复制过来。 
对于其他以插件方式提供的功能,如imageformats,也需要像上面的方式将所有需要的dll复制过来。 

我这里引用了C:\Qt\4.7.4\bin文件夹下的mingwm10.dll、QtCore4.dll、QtGui4.dll,后来发现还是缺少libgcc_s_dw2-1.dll,于是再到C:\Qt\4.7.4\bin下将这个链接库复制出来。最后发布程序,OK!


标签:动画,qt,文件,程序实现,dll,images,event,png,Qt
From: https://blog.51cto.com/u_15854579/5897270

相关文章

  • Unity-利用SkinnedMeshRenderer和Mesh的BindPose实现骨骼动画
    SkinnedMeshRenderer蒙皮网格渲染器。蒙皮是指将Mesh中的顶点附着(绑定)在骨骼之上,而且每个顶点可以被多个骨骼所控制。骨骼是皮肤网格内的不可见对象,它们影响动画过程中网格......
  • 自定义的Qt日期选择控件
    此控件也能作为日历控件使用。实现了Windows系统日历控件的鼠标悬停有白色渐变的效果(见于下图18日周围的白色渐变效果)。从中可以学习到Qt日期类的常用方法,和渐变画刷的使用......
  • 【开发小技巧】028—使用CSS创建卡通动画加载效果
    在实际项目开发中,一般都会设计一个动画加载效果,今天这个加载效果非常有趣,可以帮助用户在等待程序加载时,缓解用户着急的情绪。HTML代码:在本文中,设计了代码的基本结构。<!DOCT......
  • vs2019 配置 qt 库
    如标题所说,在vs编译器中调用qt库首先安装一个适合vs的qt版本不知道怎么安装的,可以参考:VisualStudio+Qt配置开发环境qt安装之后,我们只需要在vs编译器中设置......
  • QT程序新建一个线程
    1、创建好一个QT应用程序2、手动创建新线程类,继承QThread我这里新建的是下面newthread.h和newthread.cpp文件。newthread.h#ifndefNEWTHREAD_H#define......
  • VS2019使用Qt4.8.7
    取消系统变量中的Qt_INCLUDEPATH_。C:\Users\octob\AppData\Local\QtMsBuild中添加qt4.natvis.xml,qt4.natvisforvisualstudio2015forqt4IverifiedQString,Q......
  • 解决Qt msvc编译器中文乱码
    编码知识科普参考彻底解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)_利白的博客-CSDN博客_qt中文乱码解决方法上文讲到了QString显示中文乱码的原因。我的理解qt先对输入......
  • Windows10+VS2019从源码编译 Qt5
    参考Windows10+MSVC(VS2022)从源码编译QT5.12.11-知乎(zhihu.com)qt-labs/vstools~qt-labs/vstools(github.com)BuildingQt5fromGit/zh-QtWikiQtConfi......
  • vs2019编译Qt4.8.7
    下载4.8.7源码Indexof/archive/qt/4.8/4.8.7复制mkspecs\win32-msvc2015到mkspecs\win32-msvc2019修改qmake.conf第2行:2017=>2019第4行:2017=>2019第12......
  • JS动画框架及案例
    JS动画效果:综合——运动框架move.js1、简单动画1-1、速度动画D01_share.html1-2、透明度动画D02_opacity.html2、缓冲动画2-1、缓冲动画D03_speed.html3......