QT定时器
1.概述
这篇文章介绍如何使用定时器
2.定时器
2.1.创建项目
新建一个普通的widget类型项目,在widget.ui文件中添加一个label
控件
2.1.QTimer
在帮助文档搜索timerEvent,查看QTimer Class
类提供的定时器。
该类提供了一个定时事件的函数,他是一个虚函数需要对他进行重写。
复制函数到widget.h
文件中
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();
// 重写定时器事件void timerEvent(QTimerEvent *e);private:Ui::Widget *ui;
};
#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);
// 启动定时器,每隔1秒发送一个事件startTimer(1000);}void Widget::timerEvent(QTimerEvent *e)
{static int num = 1;ui->label_2->setText(QString::number(num++));}Widget::~Widget()
{delete ui;
}
启动后,每隔1秒调用一次
总结
这个定时器在使用时候,如果里面有个多个任务,需要用定时器ID区分每个任务,使用起来不是很方便,如下示例。
#include "widget.h"
#include "ui_widget.h"
#include <QTimerEvent>int id1;
int id2;
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
// 启动定时器,每隔1秒发送一个事件id1 = startTimer(1000);id2 = startTimer(2000);}//定时事件中如果有多个任务,就需要使用定时器id区分,使用起来不是很方便
void Widget::timerEvent(QTimerEvent *ev)
{if(ev->timerId() == id1){static int num = 1;ui->label_2->setText(QString::number(num++));}if(ev->timerId() == id2){static int num2 = 1;ui->label_2->setText(QString::number(num2++));}
}Widget::~Widget()
{delete ui;
}
2.2.对象方式创建定时器
使用QTimer
类提供的定时器,可以创建定时器对象,每个对象控制一个定时任务,使用非常方便
#include "widget.h"
#include "ui_widget.h"
#include <QTimerEvent>
#include <QTimer>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 第二种定时器方式,QTimer创建对象。QTimer * t1 = new QTimer(this);//启动定时器t1->start(1000);//开发定时器功能connect(t1, &QTimer::timeout, [=](){static int num3;ui->label_4->setText(QString::number(num3++));});}