利用Qt制作连续性图片

有关于如何利用Qt使图片的连续性切换来达到动图的效果,下面给出事例:

  1. 首先先看一看效果图:

    从上面可以看到–这是个连续性动图,是由一张张静态图片连续切换产生的。
  2. 要学会如何添加资源图片


    一直继续就行,然后先添加前缀再添加文件
  3. 先在头文件定义函数部分
  4. 然后在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;
    }
}

这就是我所写的代码了,希望对你有帮助。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值