自己跟着老师的课程一步步跟着写下来的,有需要的可以自取,有用的话还希望点一个小小的赞同哦~
QT快速入门 | 最简单最简洁的QT入门教程 | 嵌入式UI
三、QObject 定时器
objectTimer/ widget.h
#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 //Widget继承于QWidget,QWidget继承于QObject.
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
virtual void timerEvent(QTimerEvent* event);//把虚函数继承到Widget里面,需要重写虚函数virtual可写可不写,
//根据参数event区分哪个定时器,参数获取当前定时器的编号
~Widget();
private:
Ui::Widget *ui;
int myTimerId;
int picID; //第几张图片
private slots:
void on_startBt_clicked();
void on_stopBt_clicked();
};
#endif // WIDGET_H
objectTimer/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("D:\\QT\\Qtproject\\QtOnline\\picture_test\\8.jpg");
//显示
ui->label->setPixmap(pix);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_startBt_clicked()
{
//开启定时器,返回定时器的编号
myTimerId = this->startTimer(TIMEOUT); //this指的是Widget。startTimer以毫秒为单位,为开启定时器函数
}
//定义定时器事件
void Widget::timerEvent(QTimerEvent *event)
{
if(event->timerId() != myTimerId) //判断触发事件的定时器和我们需要的定时器是否相等
{
return;
}
QString path("D:\\QT\\Qtproject\\QtOnline\\picture_test\\");
path += QString::number(picID); //picID是整数型,加number转换成qstring类型字符串
path += ".jpg"; //Qlabel下的scaledContent(bool)能自动适配标签(自动调整图片大小)
QPixmap pix(path);
ui->label->setPixmap(pix);
picID++;
if (5 == picID)
{
picID = 1;
}
}
void Widget::on_stopBt_clicked()
{
this->killTimer(myTimerId); //定时器停止函数
}