一. 效果图
二.实现
1.构建工程
构建项目以及资源文件,将自己想要制作的动图分解图片存入资源文件中。
2.在cpp文件中定义定时器
eventID1=startTimer(50);
3.设置动画属性
先在头文件中声明
void paintEvent(QPaintEvent *event);
然后在cpp文件中实现
定义q1 与图片分辨率相同
q2 设置为你最终想要它呈现的大小(如果想要随窗口大小变化,如代码所示)
最后利用drawPixmap实现图片的属性
void Dialog::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QRect q1(0,0,150,150);
QRect q2(0,0,width(),height());
painter.drawPixmap(q2,pixmap[curIndex],q1);
}
4.设置重复动画(动图加载一遍后重复播放)
和上一个步骤相同,先声明
void timerEvent(QTimerEvent* event);
再实现
当最后一张图片播放完后,继续播放
void Dialog::timerEvent(QTimerEvent* event)
{
curIndex++;
if(curIndex>=114)
{ curIndex=0;}
repaint();
}
5.将资源文件放入数组
在头文件中创建数组
QPixmap pixmap[114];
声明
void InitPixmap();
实现如下:
void Dialog::InitPixmap()
{
for(int i=0;i<=114;i++)
{
QString fileName=QString(":/new/prefix1/C:/Users/Lenovo/Desktop/guichu/%1.png").arg(i+1,3,10,QLatin1Char('0'));
QPixmap map(fileName);
pixmap[i]=map;
}
}
注意:若图片过多,注意重命名图片名称以及改动Qstring。
三.完整代码
dialog.h
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACE
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = nullptr);
~Dialog();
void paintEvent(QPaintEvent *event);
void timerEvent(QTimerEvent* event);
int eventID1;
int curIndex;
void InitPixmap();
private:
QPixmap pixmap[114];
Ui::Dialog *ui;
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include<QPainter>
#include<QPixmap>
Dialog::Dialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::Dialog)
{
ui->setupUi(this);
resize(600,400);
curIndex=0;
eventID1=startTimer(50);
InitPixmap();
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QRect q1(0,0,150,150);
QRect q2(0,0,width(),height());
painter.drawPixmap(q2,pixmap[curIndex],q1);
}
void Dialog::timerEvent(QTimerEvent* event)
{
curIndex++;
if(curIndex>=114)
{ curIndex=0;}
repaint();
}
void Dialog::InitPixmap()
{
for(int i=0;i<=114;i++)
{
QString fileName=QString(":/new/prefix1/C:/Users/Lenovo/Desktop/guichu/%1.png").arg(i+1,3,10,QLatin1Char('0'));
QPixmap map(fileName);
pixmap[i]=map;
}
}
main.cpp
#include "dialog.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();
return a.exec();
}
经过这些步骤后,大家就可以实现自己想做的动图啦!