【Qt】Qt定时器
00. 目錄
文章目錄
- 00. 目錄
- 01. 概述
- 02. 開發(fā)環(huán)境
- 03. 定時器事件
- 04. 定時器信號
- 05. 附錄
01. 概述
QTimerEvent類用來描述一個定時器事件。
Qt中有兩種方法來使用定時器,一種是定時器事件,另一種是使用信號和槽。一般使用了多個定時器時最好使用定時器事件來處理。
02. 開發(fā)環(huán)境
Windows系統(tǒng):Windows10
Qt版本:Qt5.15或者Qt6
03. 定時器事件
3.1 新建Qt Widgets應(yīng)用,項目名稱為7Timer,基類選擇QWidget,類名為Widget。
3.2 widget.h文件中添加函數(shù)聲明:
protected:void timerEvent(QTimerEvent *event);3.3 添加私有變量
private:int id1;int id2;int id3;3.4 .下面到設(shè)計模式,向界面上拖入兩個標(biāo)簽部件Label
3.5 進(jìn)入widget.cpp文件,先在構(gòu)造函數(shù)中添加如下代碼
//啟動3個定時器 返回定時器IDid1 = startTimer(1000);id2 = startTimer(2000);id3 = startTimer(10000);這里開啟了三個定時器,分別返回了它們的id,這個id用來區(qū)分不同的定時器。定時器的時間單位是毫秒。每當(dāng)一個定時器溢出時,都會調(diào)用定時器事件處理函數(shù),我們可以在該函數(shù)中進(jìn)行相應(yīng)的處理。
3.6 實現(xiàn)定時器事件處理函數(shù)
//定時器事件 void Widget::timerEvent(QTimerEvent *event) {//判斷是哪個定時器超時if (event->timerId() == id1){ui->label->setText(tr("%1").arg(qrand() % 10));}else if (event->timerId() == id2){ui->label_2->setText(tr("定時器2"));}else{qApp->quit();} }使用timerId()函數(shù)返回了溢出的定時器的id,然后根據(jù)該id來判斷是哪個定時器溢出了,并進(jìn)行相應(yīng)的處理。每當(dāng)?shù)谝粋€定時器溢出時都產(chǎn)生一個小于10的隨機(jī)數(shù);當(dāng)?shù)诙€定時器溢出時,就更改標(biāo)簽的文本;當(dāng)?shù)谌齻€定時器溢出時則退出應(yīng)用程序。
04. 定時器信號
如果只是想開啟少量的定時器,也可以使用信號和槽來實現(xiàn)。
4.1 先在widget.h中添加一個私有槽聲明
private slots:void timerUpdate();4.2 widget.cpp中添加頭文件
#include <QTimer> #include <QDateTime>4.3 在構(gòu)造函數(shù)中添加如下代碼
QTimer *timer = new QTimer(this);//關(guān)聯(lián)定時器溢出洗好和響應(yīng)的槽函數(shù)connect(timer, &QTimer::timeout, this, &Widget::timerUpdate);//啟動定時器timer->start(1000);4.4 實現(xiàn)timerUpdate()函數(shù)
void Widget::timerUpdate() {QString str;//獲取系統(tǒng)當(dāng)前時間QDateTime time = QDateTime::currentDateTime();//設(shè)置系統(tǒng)時間顯示格式str = time.toString("yyyy-MM-dd hh:mm:ss dddd");ui->lineEdit->setText(str); }4.5 執(zhí)行結(jié)果
05. 附錄
源碼下載:【Qt】Qt定時器.rar
總結(jié)
- 上一篇: 【Qt】MainWindow窗口状态栏
- 下一篇: 【Qt】2D绘图之绘制简单的图形