QT定时器事件

//头文件
#ifndef TIMERDIALOG_H
//#define TIMERDIALOG_H
#include <QDialog>
#include <QTimer> //定时器
#include <QTime>  //当前事件
QT_BEGIN_NAMESPACE
namespace Ui { class TimerDialog; }
        QT_END_NAMESPACE
class TimerDialog : public QDialog
{
    Q_OBJECT
public:
    TimerDialog(QWidget *parent = nullptr);
    ~TimerDialog();
protected:
    //定义定时器事件函数
    void timerEvent(QTimerEvent*);
private slots:
    void on_m_btnStart_clicked();
    void on_m_btnReset_clicked();
    //定时器信号对应函数
   void on_mclock_timeout();
private:
    Ui::TimerDialog *ui;
    QTimer m_clock;//声明定时器对象
    int m_elapsedTimer;//定时器ID
    QTime m_elapsed;//声明一个事件对象
};
#endif // TIMERDIALOG_H
//源文件
#include "timerdialog.h"
#include "ui_timerdialog.h"
//构造函数
TimerDialog::TimerDialog(QWidget *parent) : QDialog(parent), ui(new Ui::TimerDialog)
{
    ui->setupUi(this);
    on_mclock_timeout();//时间初始化
    on_m_btnReset_clicked();//定时器初始化
    //建立信号和槽的连接关系
    connect(&m_clock,SIGNAL(timeout()),this,SLOT(on_mclock_timeout()));
    //每个1000ms发送一个定时器信号给定时器事件函数
    m_clock.start(1000);
}

//析构函数
TimerDialog::~TimerDialog(){delete ui;}
//定时器开始按钮槽函数
void TimerDialog::on_m_btnStart_clicked()
{
    if(ui->m_btnStart->text()=="开始"){
        m_elapsedTimer = startTimer(1);
        ui->m_btnStart->setText("停止");
        ui->m_btnReset->setEnabled(false);
    }else{
        ui->m_btnStart->setText("开始");
        killTimer(m_elapsedTimer);//关闭定时器
        ui->m_btnReset->setEnabled(true);
    }
}
//定时器复位按钮槽函数
void TimerDialog::on_m_btnReset_clicked()
{
    m_elapsed.setHMS(0,0,0);
    ui->m_lcdElapsed->display(m_elapsed.toString("HH:mm:ss.zzz"));
}
//时间信号槽函数
void TimerDialog::on_mclock_timeout()
{
    QTime now = QTime::currentTime();//给到now获取当前时间
    ui->m_lcdHour->display(QString::number(now.hour()));
    ui->m_lcdMinute->display(QString::number(now.minute()));
    ui->m_lcdSecond->display(QString::number(now.second()));
}

//定时器事件函数 每一毫秒调用一次
void TimerDialog::timerEvent(QTimerEvent*){
    //加一号秒给自己
    m_elapsed = m_elapsed.addMSecs(1);
    ui->m_lcdElapsed->display(m_elapsed.toString("HH:mm:ss.zzz"));
}

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值