Qt定时器:
QObject:开始定时器startTimer 结束定时器killTimer
类 QTimer
QObject设置定时器
设计一个定时转换图片功能
首页图片是在标签上显示,需要使用到label控件
设置两个按钮,分别是开始按钮和暂停按钮
确定按钮点击后:
void Widget::on_startButton_clicked()
{
//开启定时器,返回定时器编号
myTimerID = this->startTimer(TIMEOUT);
}
构造函数timerEvent 事件
void Widget::timerEvent(QTimerEvent *event)
{
//首先判断是否为所需的定时器
if(event->timerId() != myTimerID)
return;
//构建路径
QString path("C:\\Users\\30281\\Desktop\\壁纸\\");
//将图片ID转化为字符串类型添加到路径后面
path +=QString::number(picID);
path +=".jpg";
QPixmap pix(path);
ui->label->setPixmap(pix);
picID++;
if(14 == picID)
picID = 1;
}
展示图片采用QPixmap
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QPixmap pix("C:\\Users\\30281\\Desktop\\壁纸\\1.jpg");
ui->label->setPixmap(pix);
}
运行后发现存在图片只能展示一个角,在设计界面,选中Label
勾选中scaledContents,使得图片自动适配标签
暂停按钮:
void Widget::on_pushButton_2_clicked()
{
//杀死指定的定时器
this->killTimer(myTimerID);
}
完整代码
widget.cpp:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
picID = 2;
QPixmap pix("C:\\Users\\30281\\Desktop\\壁纸\\1.jpg");
ui->label->setPixmap(pix);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_startButton_clicked()
{
//开启定时器,返回定时器编号
myTimerID = this->startTimer(TIMEOUT);
}
void Widget::timerEvent(QTimerEvent *event)
{
//首先判断是否为所需的定时器
if(event->timerId() != myTimerID)
return;
//构建路径
QString path("C:\\Users\\30281\\Desktop\\壁纸\\");
//将图片ID转化为字符串类型添加到路径后面
path +=QString::number(picID);
path +=".jpg";
QPixmap pix(path);
ui->label->setPixmap(pix);
picID++;
if(14 == picID)
picID = 1;
}
void Widget::on_pushButton_2_clicked()
{
//杀死指定的定时器
this->killTimer(myTimerID);
}
widget.h:xuya
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#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 *event);
~Widget();
private slots:
void on_startButton_clicked();
void on_pushButton_2_clicked();
private:
Ui::Widget *ui;
int myTimerID;
int picID;
};
#endif // WIDGET_H
需要注意的需要将图片的名字改为连续的数字才行。
QTimer定时器
此处换了一种显示图片的方法,这里采用QImage来实现。
完整代码如下:
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;
picID=2;
//显示一张图片
QImage img;
img.load("C:\\Users\\30281\\Desktop\\壁纸\\1.jpg");
ui->label->setPixmap(QPixmap::fromImage(img));
//定时器时间到,发出timeout信号
connect(timer,&QTimer::timeout,this,&Widget::timeoutslot);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_startButton_clicked()
{
timer->start(TIMEOUT);
}
//在槽函数中实现图片的切换
void Widget::timeoutslot()
{
QString path("C:\\Users\\30281\\Desktop\\壁纸\\");
path +=QString::number(picID);
path +=".jpg";
QImage img;
img.load(path);
ui->label->setPixmap(QPixmap::fromImage(img));
picID++;
if(picID == 14)
picID =1;
}
void Widget::on_pushButton_2_clicked()
{
timer->stop();
}
widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimer>
#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;
QTimer *timer;
int picID;
};
#endif // WIDGET_H
设置一个下一张的按钮,按一下显示一张照片:
void Widget::on_singleButton_clicked()
{
QTimer::singleShot(1000 , this,SLOT(timeoutSlot()));
}