QT:利用计时器连续播放图片组成动图效果

您所在的位置:网站首页 播放器连续播放符号 QT:利用计时器连续播放图片组成动图效果

QT:利用计时器连续播放图片组成动图效果

2024-07-12 00:11| 来源: 网络整理| 查看: 265

一、效果展示 (该动图完全由jpg图片连续播放构成)

禁止投递律师函

二、步骤(代码解释+注意问题) 1. 配置头文件 头文件我就直接上代码了 #ifndef DIALOG_H #define DIALOG_H #include 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);//计时器事件,用于更新curIndex索引 void initPixmap();//通过图片路径将图片存储到pixmap数组中 int curIndex;//用于充当pixmap容器对应位置的索引 private: Ui::Dialog *ui; QPixmap pixmap[99];//Qpixmap可以与图片进行绑定,并且将图片用GPU绘制出来 }; #endif // DIALOG_H 2. 创建资源文件,导入图片 (步骤就不用我说了,讲讲注意问题)

因为这里导入的图片数量比较多,我们用到了一种方法,能够快速的将图片绑定至pixmap数组中,而免去了将所有图片路径都敲一遍的困扰。具体方法详见步骤6。 此处需要注意的是,由于这种方法,请确保你的图片名完全是由英文、下划线、数字组成。名字不符合的可以利用Windows批处理指令快速修改。方法大家可以在网上查一下,这里不过多叙述。

3. 主函数部分

startTimer() 方法指定了计时器事件所需要的时间间隔值。也就是说,在本案例中,每经过100毫秒,计时器事件就会被调用一次。

Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); resize(524,475);//指定窗口大小,此处选择和图片相一致 curIndex=0;//初始化索引 startTimer(100); initPixmap(); } 4. 绘画事件

这里的drawPixmap方法,是QPixmap中的一种方法,可以从硬件层面1绘制QPixmap所绑定的图片; 通过QRect类型指定图片的尺寸,当做参数传入drawPixmap方法中对所绘制图片的大小予以设定。

void Dialog::paintEvent(QPaintEvent *event) { QPainter painter(this); QRect q(0,0,524,475);//根据图片大小进行调整 painter.drawPixmap(q,pixmap[curIndex],q); } 5. 计时器事件

通过计时器事件来更新curIndex索引,使得每经历一次指定的时间间隔,索引就会更新一次,并且将图片通过repaint() 方法进行重绘。如果想实现循环播放的效果,只需要在循环到最后时重置索引值为0即可。

void Dialog::timerEvent(QTimerEvent *event) { curIndex++; if (curIndex>=99) curIndex=0; repaint(); } 6.将图片绑定至pixmap数组中 值得注意的是,在头文件中声明Qpixmap数组时,该数组的大小应当是你所用到图片的数量。

具体讲一下快速绑定大批量图片的步骤: ①: 利用QString类型来保存图片路径,将图片名调整至仅一个数字不同,并且该数字可作为图片播放顺序的依据。 ②: 将图片路径不同的部分用参数 %1 代替,利用QString的arg方法,将该参数按照指定的形式填充,本案例的arg方法有四个参数,分别是起始填充数字、参数的最大位数、进制、默认填充参数。 ③: 以循环的形式更新参数,同时创建和写入新的QPixmap,并存储进QPixmap数组中。

void Dialog::initPixmap() { for(int i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3