//头文件 #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")); }