我作为一个Qt的初学者,也是一个编程的萌新,我想今天教大家如何使用Qt来编写 一个把多张图片合成动图的程序。 具体步骤如下: 效果如图: 在Qt中使用定时器有两种方法,一种是QObject类,一种是QTimer类 QTimer类 动图就是把很多张图片以很快的速度浏览,在视觉上“动起来”,每隔0.1秒切换到下一张图片就好了。 .cpp文件: 效果图: 总结: 文中的一些理论知识选自 清华大学出版社 仇国巍《Qt图形界面编程入门》 最后,作为一名萌新,如果有大佬发现文章中有不正确的地方可以及时指出,也可以提出你们宝贵的建议。首先我们要学会如何在页面中显示一张图片
1)创建一个MainWindow文件,不需要ui
2)在.h文件中函数声明:void paintEvent(QPaintEvent* event);
3) 在文件中新建一个“res”文件夹,将你需要的图片添加进去
如图:
4)再插入图片,过程:打开左上角的新建->新建文件或项目->Qt->Qt Recource File->名称填写res->一直下一步->add Files 中选择你需要的图片->ctrl+s保存
5)完成如下代码:void MainWindow::paintEvent(QPaintEvent *event) { QPainter painter(this); QPixmap map(":/new/res/IMG_3556(20200415-224940).JPG");//图片的位置 QRect q(0,0,640,640);//图片的大小 painter.drawPixmap(q,map,q); }
其次,我们要学会定时器的使用
QObject类
QObject类是所以Qt对象的基类,它提供了一个基本的定时器。通过QObject::startTimer函数可以启动一个寄存器,这个函数返回一个唯一的整数表示这个定时器。这个定时器每到一个时间间隔就会“触发”并产生一个定时器事件,直到使用这个定时器的标识符来调用QObject::KillTimer结束。
QObject类中与定时器相关的成员函数有startTimer,timeEvent,killTimer。
startTimer,timeEvent,killTimer的原型如下:int QObject::startTimer(int interval, Qt::TimerType timerType); void QObject::timerEvent(QTimerEvent *event); void QObject::killTimer(int id);
通常的使用方法://创建定时器 QTimer *testTimer=new QTimer(this); //将定时器超时信号与槽练习起来 connect(testTimer,SIGNAL(timeout()),this,SLOT(testFunction())); //开始运行定时器,时间间隔为1000ms testTimer->start(1000);
最后,就是完成动图
话不多说,直接上代码:
.h文件:#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); void timerEvent(QTimerEvent* event); void InitPixmap(); void paintEvent(QPaintEvent* event); int eventID; int curIndex; private: QPixmap pixmap[64]; Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
#include "mainwindow.h" #include "ui_mainwindow.h" #include<QPainter> #include<QPixmap> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); resize(500,500); eventID=startTimer(100); curIndex=0; InitPixmap(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::timerEvent(QTimerEvent*event) { curIndex++;//图片标号加 if(curIndex>=64) { curIndex=0; } repaint(); } void MainWindow::InitPixmap() { for(int i=0;i<64;i++) { QString filename=QString(":/new/prefix1/res/1_%1.png").arg(i+1,2,10,QLatin1Char('0')); //1_%1:切换到下一张 QPixmap map(filename); pixmap[i]=map; } } void MainWindow::paintEvent(QPaintEvent *event) { QPainter painter(this); QRect q(0,0,80,91); QRect q2(0,0,width(),height()); painter.drawPixmap(q2,pixmap[curIndex],q); }
1)制作动图就是添加图片和定时器应用的结合,难度不高,掌握理论知识后就可以上机实验了。
2)图片的名称要有序,否则++不起作用,图片不会切换,例如:
3)快速寻找图片地址的方法:单击res.qrc -> Open With -> 资源编辑器 -> 肤质资源路径到剪切板
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算