日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

_ZNote_Qt_定时器的总结

發布時間:2025/4/9 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 _ZNote_Qt_定时器的总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Qt中實現定時器有兩種方法.

一種是使用QObject類定時器;一種是使用QTimer類定時器.(定時器的精度依賴于操作系統和硬件,大多數平臺支持20ms)

1,QObject類定時器.

通過QObject::startTimer(),可以把一個一毫秒為單位的時間間隔作為參數來開始定時器,這個函數返回一個唯一的整數定時器的標識符。這個定時器開始就會在每一個時間間隔"觸發",直到明確的使用這個定時器的標識符來調用QObject::killTimer()結束。?當定時器觸發時,應用程序會發送一個QTimerEvent。在事件循環中,處理器按照事件隊列的順序來處理定時器事件。當處理器正忙于其它事件處理時,定時器就不能立即處理。

?

int QObject::startTimer(int interval); //開始一個定時器并返回定時器ID,如果不能開始一個定時器,將返回0。 //定時器開始后,每隔interval毫秒間隔將觸發一次超時事件,直到killTimer()被調用來刪除定時器。 //如果interval為0,那么定時器事件每次發生時沒有窗口系統事件處理。

?

?

?

virtual void QObject::timerEvent(QTimerEvent *event); // 虛函數timerEvent()被重載來實現用戶的超時事件處理函數。 // 如果有多個定時器在運行,QTimerEvent::timerId()被用來查找指定定時器,對其進行操作。 // 當定時器事件發生時,虛函數timerEvent()隨著QTimerEvent事件參數類一起被調用,重載這個函數可以獲得定時器事件。

?

?

?

void killTimer(int id); //通過定時器標識符來殺死定時器。

?

?

實例:

// .h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>namespace Ui { class MainWindow; }class MainWindow : public QMainWindow {Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private slots:void on_pushButton_clicked();private:void timerEvent(QTimerEvent *t);Ui::MainWindow *ui;int m_nTimerId1;int m_nTimerId2;int m_nTimerId3; };#endif // MAINWINDOW_H/ .cpp ///#include "mainwindow.h" #include "ui_mainwindow.h" #include <QtCore> #include <QDebug>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);m_nTimerId1 = startTimer(1000);m_nTimerId2 = startTimer(5000);m_nTimerId3 = startTimer(10000);//有教程說直接按照順序,幾個定時器,就返回幾.但實際上并不一定這樣. }MainWindow::~MainWindow() {delete ui; }void MainWindow::timerEvent(QTimerEvent *t)//定時器時間 {int id = t->timerId();qDebug() <<id;if(id == m_nTimerId1) ui->label->setText(tr("每秒產生一個隨機數:%1").arg(qrand()%10));if(id == m_nTimerId2) ui->label_2->setText(tr("5秒后軟件將關閉"));if(id == m_nTimerId3) qApp->quit();/*switch(t->timerId())//判斷定時器的句柄{//qrand(),可以產生隨機數//qrand()%10可以產生0~9之間的隨機數//要想產生100以內的隨機數就得%100case 2:ui->label->setText(tr("每秒產生一個隨機數:%1").arg(qrand()%10));break;case 3:ui->label_2->setText(tr("5秒后軟件將關閉"));break;case 4:qApp->quit();break;//退出系統}*/ }void MainWindow::on_pushButton_clicked() {if(m_nTimerId1 != 0)killTimer(m_nTimerId1);if(m_nTimerId2 != 0)killTimer(m_nTimerId2);if(m_nTimerId2 != 0)killTimer(m_nTimerId2); }

 實現效果:

2,QTimer類實現

QTimer類定時器是QObject類定時器的擴展版或者說升級版,因為它可以提供更多的功能。比如說,它支持單次觸發和多次觸發。

使用QTimer類定時器的步驟:

(1)創建一個QTimer定時器實例:QTimer *timer = new QTimer(this);
(2)連接超時信號與槽:connect(timer, SIGNAL(timeout()), this, SLOT(testFunc()));
(3)啟動定時器start(); 定時器有兩種??start(int time)? 和??setSingleShot(true)? 前者表示重復觸發,除非stop關閉. 后者僅僅啟動一次.
(4)適時關閉定時器:stop();
(5)刪除定時器實例:delete timer;

?

例如:

?

///// .h // #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QtCore> #include <QMainWindow>class MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent = 0);~MainWindow();private slots:void timerUpdate(); private:QTimer *timer;int timerInt; };#endif // MAINWINDOW_H/// .cpp / #include "mainwindow.h" #include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {timer = new QTimer(this); //新建定時器 connect(timer,SIGNAL(timeout()),this,SLOT(timerUpdate()));//關聯定時器計滿信號和相應槽函數timer -> start(1000);//定時器開始,1000ms觸發一次timerInt = 0; }MainWindow::~MainWindow() {}void MainWindow::timerUpdate() {QDateTime time = QDateTime::currentDateTime();//獲取系統現在的時間QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd");//設置系統時間顯示格式// ui->label->setText(str);//在標簽上顯示時間qDebug() << str;if(timerInt++ == 5){if(timer ->isActive()){timer -> stop();//停止運行 }} }

?

?

?

?

?

?

?

?

 

轉載于:https://www.cnblogs.com/zpsoe/p/7080697.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的_ZNote_Qt_定时器的总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。