定时器应用1之动图

一. 效果图

在这里插入图片描述

二.实现

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();
}

经过这些步骤后,大家就可以实现自己想做的动图啦!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值