#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QTimerEvent>
#include<QTimer>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
int num1;
int num2;
int id1 = 0;
int id2 = 0;
QTimer* timer;
protected:
virtual void timerEvent(QTimerEvent*)override;
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include<QString>
#include<QTimer>
#include<QTimerEvent>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//启动计时器,并设置刷新时间
//默认时间单位为ms,可以通过std::chrono来设置单位
//暂停按钮
connect(ui->pauseButton,&QPushButton::clicked,this,[=](){
//继续计时器
static int cnt =0;
if(cnt==0){
ui->label->setText(QString::number(0));
num1 = 0;
id1 = startTimer(std::chrono::seconds(1));
ui->pauseButton->setText("暂停");
qDebug()<<"计时器1开始计时!";
}
else if(cnt&1){
killTimer(id1);
ui->pauseButton->setText("继续");
qDebug()<<"计时器1暂停计时!";
}
else{
id1 = startTimer(1000);
ui->pauseButton->setText("暂停");
qDebug()<<"计时器1继续计时!";
}
++cnt;
});
//使用计时器类来计时
connect(ui->pauseButton_2, &QPushButton::clicked, this, [=]() {
static int cnt = 0;
if (cnt % 2 == 0) { // 第一次点击或者继续计时
if (cnt == 0) {
ui->label_2->setText(QString::number(0));
num2 = 0;
timer = new QTimer(this);
//计时器事件,事件到了以后会发送一个信号
connect(timer, &QTimer::timeout, this, [=]() {
qDebug()<<"计时器id = "<<timer->timerId()<<" 正在工作"; //获取计时器id
ui->label_2->setText(QString::number(++num2));
});
qDebug() << "计时器2开始计时!";
}
timer->start(500); // 启动定时器,500毫秒执行一次
ui->pauseButton_2->setText("暂停");
}
else { // 暂停计时器
timer->stop(); //暂停计时器
ui->pauseButton_2->setText("继续");
qDebug() << "计时器2暂停计时!";
}
++cnt;
});
}
//重写计数器timerEvent
void Widget::timerEvent(QTimerEvent*ev){
ui->label->setText(QString::number(++num1));
qDebug()<<"计时器id = "<<id1<<" 正在工作"; //获取计时器id
}
Widget::~Widget()
{
delete ui;
}