1. 程式人生 > 程式設計 >Qt通過圖片組繪製動態圖片

Qt通過圖片組繪製動態圖片

本文例項為大家分享了Qt通過圖片組繪製動態圖片的具體程式碼,供大家參考,具體內容如下

任務實現:

通過定時器的使用來依次呼叫資原始檔中的靜態圖片檔案,從而達到是圖片中內容動起來的效果;

效果實現:

Qt通過圖片組繪製動態圖片

實現過程:

1.通過paintEvent()函式進行每一張圖片的匯入平鋪繪製;
2.通過timerEvent()函式對每一張圖片按照設定的時間進行重複的呼叫,從而達到動圖的效果;
3.通過自定義InitPixmap()函式來對每一張圖片進行初始化,將其匯入到Pixmap[ 64 ]組中;

整體程式碼:

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


private:


    QPixmap pixmap[64];
  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(160,182);
  startTimer(100);
  curIndex = 0;


  InitPixmap();
}


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


void Dialog::paintEvent(QPaintEvent *event)
{


  QPainter painter(this);
  QRect q(0,80,91);
  QRect q2(0,2*80,2*91);


  painter.drawPixmap(q2,pixmap[curIndex],q);


}


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(":/Res/Resourse/1_%1.png").arg(i+1,2,10,QLatin1Char('0'));
    QPixmap map(filename);


    pixmap[i]=map;
  }
  
}

呼叫過程

1.通過InitPixmap()函式將六十四張圖片儲存在Pixmap陣列中;
2.通過paintEvent()函式依次呼叫圖片;
3.通過timerEvent()函式來設定呼叫的迴圈;
4在主函式中通過定時器設定呼叫間隔為100ms;

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。