Qt计时器的简单使用

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值