Qt使用计时器事件在窗口实现一个动图

效果图

Qt使用计时器事件在窗口实现一个动图_第1张图片

实现思路

1.将动图的所有图片放入到一个数组中。
2.创建一个索引变量。
3.创建一个计时器事件。
4.调用函数展示图片,当一轮动图结束后重新调用。

代码分享

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include 

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 eventID;
    void InitPixmap();
    int curIndex;

private:
    Ui::Dialog *ui;
    QPixmap pixmap[64];
};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include
#include

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Dialog)
{
    ui->setupUi(this);
    eventID=startTimer(100);
    InitPixmap();
    curIndex=0;
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QRect q1(0,0,80,91);
    QRect q2(0,0,80*2,91*2);
    painter.drawPixmap(q2,pixmap[curIndex],q1);
}

void Dialog::timerEvent(QTimerEvent *event)
{
    curIndex++;
    if(curIndex>=64)curIndex=0;
    repaint();

}
void Dialog::InitPixmap()
{
    for(int i=0;i<64;i++){
        QString FileName=QString(":/image/1_%1.png").arg(i+1,2,10,QLatin1Char('0'));
        QPixmap map(FileName);
        pixmap[i]=map;
    }
}

你可能感兴趣的:(Qt使用计时器事件在窗口实现一个动图)