实现效果及布局
ui文件所涉及的对象
要想图片显示完全就勾选scaleContents
QObject定时器总结
1、QObject定时器是Qobject对象元素,也就是基类元素
2、需要实现 virtual void timerEvent(QTimerEvent *envent)方法
QTimerEvent *envent的参数就可以获取当前定时器是哪一个编号
3、this->startTimer(TIMEOUT);是开启QObject定时器的方法,该方法会返回一个定时器的编号,返回值是int类型,所以要用int变量Objectimerid去接收他的值
4、void timerEvent(QTimerEvent *envent)方法是每一个QObject定时器定时器都会调用的虚函数,所以根据envent中的timerId方法进行提取定时器的Id跟开始的int Id进行对比执行相应的代码
5、停止时钟使用killTimer()方法,参数传递要停止的时钟编号
实现代码:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimer>
#include <QPixmap>
#include <QStringList>
#define TIMEOUT 1*1000
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
virtual void timerEvent(QTimerEvent *envent); //QTimerEvent *envent的参数就可以获取当前定时器是哪一个编号
~Widget();
private slots:
void on_startbutton_clicked();
void timeoutSlot();
void on_pushButton_2_clicked();
void on_pushButton_clicked();
void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
private:
Ui::Widget *ui;
QStringList imgnamelist;
int id;
QTimer *timer;
QString name;
QString path="C:\\Users\\Administrator\\Desktop\\articlepng\\";
int Objectimerid;
};
#endif // WIDGET_H
//widget.cpp
#include "widget.h"
#include "./ui_widget.h"
//初始化函数(构造函数)
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
timer = new QTimer;//定义一个Timer对象
this->imgnamelist<<"d5888965427887163d97689ed6f2d5b8.jpeg"<<"d48e7395c21a4f82ba0f77789b93d4f9.jpeg"<<"e52e7a6a8b58fdd1dcbd555c20bc746a.png";
this->id=0;
this->name=this->imgnamelist.at(this->id);
//第一种写法
// QImage img;
// img.load(this->path+this->name);
//ui->label->setPixmap(QPixmap::fromImage(img));
//第二种写法
QPixmap iconQPixmap(this->path+this->name);
ui->label->setPixmap(iconQPixmap);
this->id++;//列表imgnamelist的index加一
}
//析构函数
Widget::~Widget()
{
delete ui;
}
//开始按钮
void Widget::on_pushButton_3_clicked()
{
this->Objectimerid=this->startTimer(TIMEOUT);
}
void Widget::timerEvent(QTimerEvent *envent)//每个定时器到时间后都会调用timerEvent定义的虚函数
{
//只能通过envent指针的timerId函数判断
if(envent->timerId()==Objectimerid)
{
this->name=imgnamelist.at(id);
// QImage img;
// img.load(this->path+this->name);
QPixmap iconQPixmap(this->path+this->name);
// ui->label->setPixmap(QPixmap::fromImage(img));
ui->label->setPixmap(iconQPixmap);
this->id++;
if(this->imgnamelist.length()==this->id)
this->id=0;
}
}
//结束按钮
void Widget::on_pushButton_4_clicked()
{
this->killTimer(Objectimerid);
}
QTimer定时器总结:
1、创建Timer对象
2、使用connect函数进行把timer对象计时结束后出发timerout信号与槽函数进行绑定
connect(timer,&QTimer::timeout,this,&Widget::timeoutSlot);
3、使用timer->start(TIMEOUT)进行计时开始
4、使用timer->stop(); //停止
实现代码
//widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimer>
#include <QPixmap>
#include <QStringList>
#define TIMEOUT 1*1000
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_startbutton_clicked();
void timeoutSlot();
void on_pushButton_2_clicked();
private:
Ui::Widget *ui;
QStringList imgnamelist;//定义一个字符串list
int id;//定义一个访问imgnamelist的index的int类型的变量
QTimer *timer;
QString name;//文件名字String
QString path="C:\\Users\\Administrator\\Desktop\\articlepng\\";//路径String
};
#endif // WIDGET_H
//widget.cpp
#include "widget.h"
#include "./ui_widget.h"
//初始化函数(构造函数)
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
timer = new QTimer;//定义一个Timer对象
this->imgnamelist<<"d5888965427887163d97689ed6f2d5b8.jpeg"<<"d48e7395c21a4f82ba0f77789b93d4f9.jpeg"<<"e52e7a6a8b58fdd1dcbd555c20bc746a.png";
this->id=0;
this->name=this->imgnamelist.at(this->id);
//第一种写法
// QImage img;
// img.load(this->path+this->name);
//ui->label->setPixmap(QPixmap::fromImage(img));
//第二种写法
QPixmap iconQPixmap(this->path+this->name);
ui->label->setPixmap(iconQPixmap);
//timer的timerout信号与this的Wiget对象的槽函数timerSlot进行绑定
connect(timer,&QTimer::timeout,this,&Widget::timeoutSlot);
this->id++;//列表imgnamelist的index加一
}
//析构函数
Widget::~Widget()
{
delete ui;
}
//开始按钮点击后调用的槽函数
void Widget::on_startbutton_clicked()
{
timer->start(TIMEOUT);//TIMEOUT是宏定义时间
}
//Timer对象定时结束调用的槽函数
void Widget::timeoutSlot()
{
this->name=imgnamelist.at(id);//访问imgnamelist索引的元素
// QImage img;
// img.load(this->path+this->name);
// ui->label->setPixmap(QPixmap::fromImage(img));
QPixmap iconQPixmap(this->path+this->name);
ui->label->setPixmap(iconQPixmap);
this->id++;//运行槽函数后加1然后再判断imgnamelist列表的长度是否全部展示,然后初始化掉index
if(this->imgname.length()==this->id)
this->id=0; //初始化话掉列表imgnamelist的index
}
//结束按钮绑定槽函数
void Widget::on_pushButton_2_clicked()
{
timer->stop(); //停止
}
执行一次的
void Widget::on_pushButton_clicked()
{
QTimer::singleShot(1000,this,SLOT(timeoutSlot()));
}