有时候我们在设计的时候我们会用到定时器,让他每间隔一段时间就增加1.
如下:
我们在上个博客的基础上创建一个label_2实现定时器的功能。要实现他每间隔1s就会加1的操作。
我们在widget.cpp文件如下所示:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//启动定时器:参数1:时间间隔,单位是ms
startTimer(1000);
}
Widget::~Widget()
{
delete ui;
}
void Widget::timerEvent(QTimerEvent *)
{
int num=1;
//要把num的int类型转化为number
ui->label_2->setText(QString::number(num++));
}
结果如下:
发现他一直是1就不变了。
发现每个一秒都走一下timerEvent()这个方法,所以每一次都重新定义一个int num=1.所以我们要提高它的作用域不让他变成局部变量可以加一个static
如下:
那如果我们需要定义两个定时器,一个是每间隔1s增加1次,一个是每隔两秒增加一次呢?
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//启动定时器:参数1:时间间隔,单位是ms
id1 = startTimer(1000);
id2 = startTimer(2000);
//定义定时器2:
}
Widget::~Widget()
{
delete ui;
}
void Widget::timerEvent(QTimerEvent *ev)
{
if(ev->timerId()==id1)
{
static int num=1;
//要把num的int类型转化为number
ui->label_2->setText(QString::number(num++));
}
else if(ev->timerId()==id2) {
static int num2=1;
ui->label_3->setText(QString::number(num2++));
}
}
如果对于多个定时器我们就需要定义每个定时器的id。
对于每个定时器的id定义,我们在widget.h文件中定义了。
利用第二种方式QT自带的类定义定时器,实现每间隔0.5s增加一次。
提前需要导入import<QTimer>
#include "widget.h"
#include "ui_widget.h"
#include<QTimer>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//启动定时器:参数1:时间间隔,单位是ms
id1 = startTimer(1000);
//定义定时器2:
id2 = startTimer(2000);
//定时器的第二种方式
QTimer *timer = new QTimer(this);
//启动定时器
timer->start(500);
connect(timer,&QTimer::timeout,[=](){
static int num =1;
//label_4每隔0.5s加1
ui->label_4->setText(QString::number(num++));
});
}
Widget::~Widget()
{
delete ui;
}
void Widget::timerEvent(QTimerEvent *ev)
{
if(ev->timerId()==id1)
{
static int num=1;
//要把num的int类型转化为number
ui->label_2->setText(QString::number(num++));
}
else if(ev->timerId()==id2) {
static int num2=1;
ui->label_3->setText(QString::number(num2++));
}
}
如果我们想让定时器暂停以及再启动,我们可以点击一个button实现。
#include "widget.h"
#include "ui_widget.h"
#include<QTimer>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//启动定时器:参数1:时间间隔,单位是ms
id1 = startTimer(1000);
//定义定时器2:
id2 = startTimer(2000);
//定时器的第二种方式
QTimer *timer = new QTimer(this);
//启动定时器
timer->start(500);
connect(timer,&QTimer::timeout,[=](){
static int num =1;
//label_4每隔0.5s加1
ui->label_4->setText(QString::number(num++));
});
//点击暂停,实现停止定时器
connect(ui->stop_btn,&QPushButton::clicked,[=](){
timer->stop();
});
//点击实现启动定时器
connect(ui->pushButton,&QPushButton::clicked,[=](){
timer->start();
});
}
Widget::~Widget()
{
delete ui;
}
void Widget::timerEvent(QTimerEvent *ev)
{
if(ev->timerId()==id1)
{
static int num=1;
//要把num的int类型转化为number
ui->label_2->setText(QString::number(num++));
}
else if(ev->timerId()==id2) {
static int num2=1;
ui->label_3->setText(QString::number(num2++));
}
}