有关于如何利用Qt使图片的连续性切换来达到动图的效果,下面给出事例:
- 首先先看一看效果图:
从上面可以看到–这是个连续性动图,是由一张张静态图片连续切换产生的。 - 要学会如何添加资源图片
一直继续就行,然后先添加前缀再添加文件
- 先在头文件定义函数部分
- 然后在cpp文件里面完成对应函数的实现
void Dialog::paintEvent(QPaintEvent *event)
{
//画图
QPainter painter(this);
for(int i=0;i<8;i++) //使图片横向放置
{
QRect q(0,0,80,91); //图片大小
QRect q2(1.5*80*i,0,1.5*80,1.5*91); //图片位置使图片错开放置
painter.drawPixmap(q2,pixmap[curIndex+8*i],q); //放置图片,调用对应数组的图片完成连续切换
}
}
设置定时器函数
//定时器
void Dialog::timerEvent(QTimerEvent *event)
{
curIndex++;
if(curIndex>=8) //每8个图片连接
curIndex=0;
repaint();
}
依次选取图片
void Dialog::InitPixmap()
{
for(int i=0;i<64;i++)
{
QString fileName=QString(":/1_%1.png").arg(i+1,2,10,QLatin1Char('0'));
//i+1:第几个,2:位数,10:进制数,QLatin1Char('0'):补充数
QPixmap map(fileName);
pixmap[i]=map; //将每个图片放入对应数组中
}
}
5. 最后附上完整代码
.h文件
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
//事件,自动调用的一些函数:鼠标键盘
void paintEvent(QPaintEvent * event); //画图函数
void timerEvent(QTimerEvent*event); //定时器函数
int eventID1,eventID2; //定时器的快慢
int curIndex;
void InitPixmap();
private:
QPixmap pixmap[64];
Ui::Dialog *ui;
};
#endif // DIALOG_H
.cpp文件
#include "dialog.h"
#include "ui_dialog.h"
#include <QPainter>
#include <cmath>
#include <QPixmap>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
resize(1024,1024); //定义初始窗口大小
//定时器
eventID1=startTimer(100); //可自定义切换快慢
//eventID2=startTimer(500);
curIndex=0;
InitPixmap();
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::paintEvent(QPaintEvent *event)
{
//画图
QPainter painter(this);
for(int i=0;i<8;i++)
{
QRect q(0,0,80,91); //图片大小
QRect q2(1.5*80*i,0,1.5*80,1.5*91); //图片位置
painter.drawPixmap(q2,pixmap[curIndex+8*i],q); //放置图片
}
}
//定时器
void Dialog::timerEvent(QTimerEvent *event)
{
curIndex++;
if(curIndex>=8)
curIndex=0;
repaint();
}
void Dialog::InitPixmap()
{
for(int i=0;i<64;i++)
{
QString fileName=QString(":/1_%1.png").arg(i+1,2,10,QLatin1Char('0'));
//i+1:第几个,2:位数,10:进制数,QLatin1Char('0'):补充数
QPixmap map(fileName);
pixmap[i]=map;
}
}
这就是我所写的代码了,希望对你有帮助。