如何使用Qt定时器技术实现动态图像展示效果?

2026-04-28 06:372阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1201个文字,预计阅读时间需要5分钟。

如何使用Qt定时器技术实现动态图像展示效果?

本文分享了一个Qt项目实例,实现了基于定时器的动态图展示。代码供大家参考,内容概述如下:

总体介绍(1)整体介绍:该实例使用Qt定时器功能,将现有的动态图逐帧输出,实现视觉效果上的动态效果。

主要内容(1)总体概述:本实例通过定时器控制动态图逐帧显示,达到动态效果。

(2)动态图展示:主要实现动态图逐帧输出的功能。

总体概述本实例通过Qt定时器实现动态图逐帧输出,视觉效果动态。

本文实例为大家分享了Qt基于定时器实现动图展示的具体代码,供大家参考,具体内容如下

总体概述

(1)总体介绍

动图展示主要是将已有的动图逐帧图片连续输出,达到视觉上的动态图效果,本次介绍两例,分别为单一动图和分组动图。

如何使用Qt定时器技术实现动态图像展示效果?

主要原理是设置一个定时器,然后随设置的秒数将资源中的逐帧图片输出,让图片连续变化。

(2)素材获得途径

关于素材来源,可以到网站下载现成的逐帧图片素材包,也可以找到自己喜欢的动态图,通过软件(如:爱奇艺万能播放器)将动图逐帧保存得到素材。

(注意:不论通过哪种方式获得素材,都需要使图片的序号格式一致)

(3)通用函数介绍

①绘图函数

Qt中的paintEvent()函数是一个用于绘制图形的函数,这个函数需要添加头文件:

#include <QPainter>

同时paintEvent()函数需要在dialog.h文件中提前声明:

public: void paintEvent(QPaintEvent *);

需要注意的是,此函数不能主动调用,且不能把我们需要的绘图程序写在此函数外面。

②定时器事件

定时器事件主要用到timerEvent(),timerEvent是QDbejct所内置的事件,所有继承QDbejct的类都可以使用。
要运用timerEvent()需要在类中提前声明:

public: void timerEvent(QTimerEvent *);

此外,要产生timerEvent,就需要startTimer(dalaytime)方法,例如:

int eventID; eventID = startTimer(50);

第一例:单一动图展示

dialog.h文件:

class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = nullptr); ~Dialog(); void paintEvent(QPaintEvent *); void timerEvent(QTimerEvent *); int eventID; int curIndex; void InitPixmap(); private: QPixmap pixmap[168]; Ui::Dialog *ui; };

头文件:

#include <QPainter> #include <QPixmap>

将资源放入InitPixmap函数中:

void Dialog::InitPixmap(){ for(int i=1;i<=168;i++){ QString fileName = QString(":/res/picture/1(%1).png").arg(i+1,3,10,QLatin1Char('0')); QPixmap map(fileName); pixmap[i] = map; } }

":/res/picture/1(%1).png"为图片的资源路径,且此处图片的编号需统一。

arg中的参数为:

arg(变量的值, 位数, 进制, 位数不够时补位的数);

定时器事件:

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

绘图函数:

void Dialog::paintEvent(QPaintEvent *){ QPainter painter(this); QRect q(0,0,450,357); QRect q2(50,50,450,357); painter.drawPixmap(q2,pixmap[curIndex],q); }

关联函数:

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

效果图:

第二例:分组动图展示

分组动图展示与单一动图展示大致相同,只是在绘图函数中将以放入的资源进行分组,将不同组图片同时不同位置输出。

dialog.h文件:

class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = nullptr); ~Dialog(); void paintEvent(QPaintEvent *); void timerEvent(QTimerEvent *); int eventID1; int curIndex; void InitPixmap(); private: QPixmap pixmap[64]; Ui::Dialog *ui; };

头文件:

#include <QPainter> #include <QPixmap>

将资源放入InitPixmap函数中:

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

定时器事件:

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

绘图函数:

void Dialog::paintEvent(QPaintEvent *){ QPainter painter(this); int i=0;i<8;i++){ QRect q(0,0,80,91); QRect q2(2*80*i,100,2*80,2*91); painter.drawPixmap(q2,pixmap[curIndex+8*i],q); } }

关联函数:

Dialog::Dialog(QWidget *parent) : QDialog(parent) , ui(new Ui::Dialog) { ui->setupUi(this); resize(2*91*8,1024); eventID1 = startTimer(100); curIndex = 0; InitPixmap(); }

效果图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

本文共计1201个文字,预计阅读时间需要5分钟。

如何使用Qt定时器技术实现动态图像展示效果?

本文分享了一个Qt项目实例,实现了基于定时器的动态图展示。代码供大家参考,内容概述如下:

总体介绍(1)整体介绍:该实例使用Qt定时器功能,将现有的动态图逐帧输出,实现视觉效果上的动态效果。

主要内容(1)总体概述:本实例通过定时器控制动态图逐帧显示,达到动态效果。

(2)动态图展示:主要实现动态图逐帧输出的功能。

总体概述本实例通过Qt定时器实现动态图逐帧输出,视觉效果动态。

本文实例为大家分享了Qt基于定时器实现动图展示的具体代码,供大家参考,具体内容如下

总体概述

(1)总体介绍

动图展示主要是将已有的动图逐帧图片连续输出,达到视觉上的动态图效果,本次介绍两例,分别为单一动图和分组动图。

如何使用Qt定时器技术实现动态图像展示效果?

主要原理是设置一个定时器,然后随设置的秒数将资源中的逐帧图片输出,让图片连续变化。

(2)素材获得途径

关于素材来源,可以到网站下载现成的逐帧图片素材包,也可以找到自己喜欢的动态图,通过软件(如:爱奇艺万能播放器)将动图逐帧保存得到素材。

(注意:不论通过哪种方式获得素材,都需要使图片的序号格式一致)

(3)通用函数介绍

①绘图函数

Qt中的paintEvent()函数是一个用于绘制图形的函数,这个函数需要添加头文件:

#include <QPainter>

同时paintEvent()函数需要在dialog.h文件中提前声明:

public: void paintEvent(QPaintEvent *);

需要注意的是,此函数不能主动调用,且不能把我们需要的绘图程序写在此函数外面。

②定时器事件

定时器事件主要用到timerEvent(),timerEvent是QDbejct所内置的事件,所有继承QDbejct的类都可以使用。
要运用timerEvent()需要在类中提前声明:

public: void timerEvent(QTimerEvent *);

此外,要产生timerEvent,就需要startTimer(dalaytime)方法,例如:

int eventID; eventID = startTimer(50);

第一例:单一动图展示

dialog.h文件:

class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = nullptr); ~Dialog(); void paintEvent(QPaintEvent *); void timerEvent(QTimerEvent *); int eventID; int curIndex; void InitPixmap(); private: QPixmap pixmap[168]; Ui::Dialog *ui; };

头文件:

#include <QPainter> #include <QPixmap>

将资源放入InitPixmap函数中:

void Dialog::InitPixmap(){ for(int i=1;i<=168;i++){ QString fileName = QString(":/res/picture/1(%1).png").arg(i+1,3,10,QLatin1Char('0')); QPixmap map(fileName); pixmap[i] = map; } }

":/res/picture/1(%1).png"为图片的资源路径,且此处图片的编号需统一。

arg中的参数为:

arg(变量的值, 位数, 进制, 位数不够时补位的数);

定时器事件:

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

绘图函数:

void Dialog::paintEvent(QPaintEvent *){ QPainter painter(this); QRect q(0,0,450,357); QRect q2(50,50,450,357); painter.drawPixmap(q2,pixmap[curIndex],q); }

关联函数:

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

效果图:

第二例:分组动图展示

分组动图展示与单一动图展示大致相同,只是在绘图函数中将以放入的资源进行分组,将不同组图片同时不同位置输出。

dialog.h文件:

class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = nullptr); ~Dialog(); void paintEvent(QPaintEvent *); void timerEvent(QTimerEvent *); int eventID1; int curIndex; void InitPixmap(); private: QPixmap pixmap[64]; Ui::Dialog *ui; };

头文件:

#include <QPainter> #include <QPixmap>

将资源放入InitPixmap函数中:

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

定时器事件:

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

绘图函数:

void Dialog::paintEvent(QPaintEvent *){ QPainter painter(this); int i=0;i<8;i++){ QRect q(0,0,80,91); QRect q2(2*80*i,100,2*80,2*91); painter.drawPixmap(q2,pixmap[curIndex+8*i],q); } }

关联函数:

Dialog::Dialog(QWidget *parent) : QDialog(parent) , ui(new Ui::Dialog) { ui->setupUi(this); resize(2*91*8,1024); eventID1 = startTimer(100); curIndex = 0; InitPixmap(); }

效果图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。