一、定时器1
可以在帮助文档中找到计时器事件
需求:创建两个label,使得,上面一个label,每间隔1s就+1,下面一个label,每隔2s就+1
在widget.h中
//重写定时器的事件 void timerEvent(QTimerEvent *e); int id1;//定时器1的唯一标识 int id2;//定时器2的唯一标识
widget.cpp
#include "widget.h" #include "./ui_widget.h" #include<QTimerEvent> Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //启动定时器 id1 = startTimer(1000); //参数1:间隔(单位毫秒) id2 = startTimer(2000); } Widget::~Widget() { delete ui; } void Widget::timerEvent(QTimerEvent *e){ if(e->timerId()==id1){ //int num=1; //如果不是静态变量,这个局部变量导致最终label显示的文本都是1 static int num=1; //变量初始化调用一次,后面不会再调用。单例模式就是用这个来的 //设置文本(每隔1秒+1) ui->label_2->setText(QString::number(num++));//将int转为QString } else if(e->timerId()==id2){ //设置文本(每隔2秒+1) static int num2=1; ui->label_3->setText(QString::number(num2++));//将int转为QString } }
定时器1:总结
- 利用事件 void timerEvent(QTimerEvent *ev)
- 启动定时器 startTimer(1000) 毫秒单位
- startTimer 的返回值是定时器的唯一标示 可以和 ev->timerId 做比较
二、定时器2
推荐使用这种定时器的方式
//定时器第二种方式 QTimer *timer = new QTimer(this); //启动定时器 timer->start(500);//500毫秒 connect(timer,&QTimer::timeout,[=](){ static int num=1; //label4 每隔0.5秒+1 ui->label_4->setText(QString::number(num++)); });
另外还可以来一个按钮(实现计时暂停的功能)
//点击暂停按钮 实现停止定时器 connect(ui->btn,&QPushButton::clicked,[=](){ timer->stop(); });
定时器2总结