一、实现目标
实现三个定时器,第一个1s增加一个数,第二个2s增加一个数,第三个0.5s增加一个数,按钮控制第三个定时器,暂停和继续根据定时器状态自动切换;
二、代码实现
widght.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); //重写定时器的事件 void timerEvent(QTimerEvent *); int timer1;//定时器1的唯一标识 int timer2;//定时器2的唯一标识 private: Ui::Widget *ui; }; #endif // WIDGET_H
widght.cpp
#include "widget.h" #include "ui_widget.h" #include<QTimer> //定时器的类 Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); //启动定时器 间隔时间:毫秒 timer1=startTimer(1000); timer2=startTimer(2002); //定时器第二种方式 QTimer * timer=new QTimer(this); //启动定时器 timer->start(500); connect(timer,&QTimer::timeout,[=](){ static int num=1; ui->label_time3->setText(QString::number(num++)); }); //点击暂停按钮,停止定时器 connect(ui->btn,&QPushButton::clicked,[=](){ //获取定时器状态 int isActive= timer->isActive(); if(isActive){ timer->stop(); ui->btn->setText("继续"); }else{ //恢复启动 timer->start(); ui->btn->setText("暂停"); } }); } void Widget::timerEvent(QTimerEvent * ev){ int timerId=ev->timerId(); //定义一次 static int num=1; //每隔1秒+1 if(timerId==timer1){ ui->label_time->setText(QString::number(num++)); } static int num2=1; //每隔2秒+1 if(timerId==timer2){ ui->label_time2->setText(QString::number(num2++)); } } Widget::~Widget() { delete ui; }
结论:推荐使用第二种,更灵活方便。