国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Qt】定時器處理——定時器事件類QTimerEvent和定時器類QTimer使用

這篇具有很好參考價值的文章主要介紹了【Qt】定時器處理——定時器事件類QTimerEvent和定時器類QTimer使用。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。


Qt定時器處理

Qt的定時器只能通過純代碼實(shí)現(xiàn),定時器顧名思義,主要作用是定時特定的時間。
Qt提供了定時器事件類QQTimerEvent和定時器類QTimer實(shí)現(xiàn)定時器操作。

定時器QTimer使用

Qt提供了更高層次的定時器編程接口**QTimer**類,可以使用信號和槽,還可以設(shè)置定時一次。比較常用的方法有:

  • QTimer::setInterval(timeout):設(shè)置定時的時間,單位是ms;
  • QTimer::start():啟動定時器;
  • QTimer::timeout():時間到發(fā)出信號timeout();
  • QTimer::singleShot():只運(yùn)行一次的定時器;
  • QTimer::stop():停止定時器

QTimer實(shí)現(xiàn)定時器功能大致步驟:

  • 創(chuàng)建定時器對象,QTimer *timer = new QTimer(this);
  • 將定時器的超時信號與自定義的時間更新槽函數(shù)連接,也可以使用lambda表達(dá)式connect(timer,&QTimer::timeout,this,&MyLCDNumber::timerUpdate);
  • 設(shè)置溢出時間,timer->setInterval(1000);
  • 定時器開始定時,timer->start();
  • 需要停止定時器調(diào)用timer->stop()即可。
  • 具體代碼可參考如下:
MyLCDNumber::MyLCDNumber(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyLCDNumber)
{
    ui->setupUi(this);
    QTimer *timer = new QTimer(this);
    // 關(guān)聯(lián)定時器的超時信號都自定義槽函數(shù)中
    connect(timer,&QTimer::timeout,this,&MyLCDNumber::timerUpdate);
    timer->setInterval(1000);
    timer->start(); 
}
void MyLCDNumber::timerUpdate()
{
    QTime time = QTime::currentTime();
    QString text = time.toString("hh:mm:ss");
    if(time.second() %2 ==0 )  // second()獲取秒的值
    {
        text[5] = ' ';  // 每隔1s將:顯示為空格
    }
    ui->lcdNumber->display(text);
}

基于Lambda函數(shù)的實(shí)現(xiàn)方式

基于Lambda函數(shù)的實(shí)現(xiàn)方式僅綁定信號槽時不同,如下:

connect(m_timer,&QTimer::timeout,this,[=]()
{
	// 處理定時內(nèi)容
}
);

一次性定時器

實(shí)現(xiàn)如下,該種方式特定情況下非常適用,比如防止按鈕不小心重復(fù)點(diǎn)擊或雙擊時,可以在按鈕的點(diǎn)擊信號槽函數(shù)中使用

QTimer::singleSlot(1000,this,[=]{
// 定時器處理
});

防止按鈕重復(fù)點(diǎn)擊或雙擊:

ui->pushButton->setEnabled(false);  // 使按鈕使能關(guān)閉
QTimer::singleSlot(500,this,[=]{
ui->pushButton->setEnabled(true);  // 500ms后按鈕使能開啟
});

使用QObject內(nèi)部定時器事件類QTImerEvent,重寫定時器事件實(shí)現(xiàn)定時器功能

重寫定時器事件在需要多個定時器的時候,可以減少系統(tǒng)資源。QtimerEvent類描述了一個定時器事件。

  • QObject的子類可以使用startTimer()可以開啟一個定時器,該函數(shù)參數(shù)單位是毫秒,表示設(shè)定的時間,函數(shù)返回值表示這個定時器。當(dāng)定時器到達(dá)指定的時間時會進(jìn)入timerEvent()函數(shù)進(jìn)行需要的操作。
  • 通過函數(shù)timerId()可以獲取startTimer()返回的定時器。
  • 如果想要停止定時器調(diào)用killTimer()即可。

實(shí)現(xiàn)步驟:

  1. 頭文件聲明,重寫定時器事件函數(shù)timerEvent()

    void timerEvent(QTImerEvent *event);  // 重寫定時器事件函數(shù)
    int m_timerID;  // 定時器ID
    
  2. 啟動定時器startTimer()并返回定時器ID

    m_timerID = startTimer(1000);  // 啟動定時1s
    
  3. 處理定時器事件

    void classname::timerEvent(QTimerEvent *event)
    {
    	if(m_timerID == event->timerID())  // 判斷定時器ID
    	{
    		// 處理ID為m_timerID的定時器事件
    	}
    	else if(m_timerID2 == event->timerID())
    	{
    		// 處理另一個定時器的事件
    	}
    }
    
  4. 在需要時關(guān)閉定時器killTimer()

    killTimer(m_timerID);
    

總結(jié)使用QTImerEven實(shí)現(xiàn)定時器的操作的步驟:

  1. 使用startTImer()開啟一個定時器;
  2. 重寫timerEvent()函數(shù);
  3. 需要關(guān)閉定時器時調(diào)用killTimer();

當(dāng)需要多個定時器時可以參考如下使用:文章來源地址http://www.zghlxwxcb.cn/news/detail-446948.html

QList<int> timerIDList;
// ...
for(int i=0;i<100;i++)
	timerIDList.append(startTimer(1000));
// ...

void calssname::timerEvent(QTimerEvent *event)
{
	if(timerIDList.at(0) == event->timerID())
	{
		// 處理當(dāng)前定時器
	}
	else if(timerIDList.at(0) == event->timerID())
	{
		// 處理當(dāng)前定時器
	}
	//  ...
}

到了這里,關(guān)于【Qt】定時器處理——定時器事件類QTimerEvent和定時器類QTimer使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Qt小項(xiàng)目貪吃蛇實(shí)線,主要掌握定時器、信號與槽、按鍵事件、繪制事件、坐標(biāo)運(yùn)算、隨機(jī)數(shù)生成等
  • 定時器/事件

    定時器/事件

    網(wǎng)頁中經(jīng)常會需要:每隔一段時間需要 自動 執(zhí)行一段代碼,不需要我們手動去觸發(fā) ----- 定時器函數(shù) 比如:網(wǎng)頁中得倒計時 定時器函數(shù)有兩種: 間隔函數(shù) 和 延遲函數(shù) 間隔函數(shù) 作用:每隔指定的時間 自動重復(fù)執(zhí)行某些代碼 定時器函數(shù)可以 開啟 和 關(guān)閉 定時器 開啟定時器

    2024年02月11日
    瀏覽(17)
  • Qt 定時器

    Qt 定時器

    startTimer(); 注意:定時器參數(shù)要是全局或者靜態(tài)變量。 ? 沒有結(jié)束函數(shù) int timerId=startTimer(); startTimer()返回定時器標(biāo)志 需設(shè)置為類的成員--類內(nèi)使用 通過定時器事件判斷 ? QTimer類事件間隔到達(dá) QTimer不需要ID,只需要對象不同就可以區(qū)別定時器。 start() stop() ? ? timer=new QTimer(thi

    2024年02月09日
    瀏覽(22)
  • QT學(xué)習(xí)之定時器

    QT學(xué)習(xí)之定時器

    一、定時器 第一種方式: 1 利用事件 void timerEvent ( QTimerEvent * ev) 2 啟動定時器 startTimer( 1000) 毫秒單位 3 timerEvent 的返回值是定時器的唯一標(biāo)示 可以和ev-timerid 做比較 第二種方式: 1 利用定時器類 QTimer 2 創(chuàng)建定時器對象 QTimer * timer = new QTimer(this) 3 啟動定時器 timer-start(毫秒)

    2024年02月16日
    瀏覽(21)
  • Qt學(xué)習(xí)(一)-------- 定時器、繪圖

    Qt學(xué)習(xí)(一)-------- 定時器、繪圖

    1.定時器 QTimer ? ??? 創(chuàng)建定時器對象??QTimer *timer = new QTimer(this); ? ?? 啟動定時器?timer-start(毫秒); ? ?? 監(jiān)聽信號 connect(timer,QTimer::timeout,[=](){? ? ?}); -----------------------------------------------------------例子----------------------------------------------------------- ? ? ? 點(diǎn)擊暫停,實(shí)現(xiàn)

    2024年02月03日
    瀏覽(25)
  • 【QT】時間日期與定時器

    【QT】時間日期與定時器

    目錄 1.時間日期相關(guān)的類 2.日期時間數(shù)據(jù)與字符串之間的轉(zhuǎn)換 2.1 時間、日期編輯器屬性設(shè)置 2.2 日期時間數(shù)據(jù)的獲取與轉(zhuǎn)換為字符串 2.3?字符串轉(zhuǎn)換為日期時間 3.QCaIendarWidget日歷組件 3.1基本屬性 3.2?公共函數(shù) 3.3?信號 4.實(shí)例程序演示時間日期與定時器的使用 時間日期是經(jīng)常

    2024年02月04日
    瀏覽(20)
  • 自定義循環(huán)隊列、軟件定時器、事件集,實(shí)用嵌入式代碼庫

    本篇博文分享一個很實(shí)用的嵌入式代碼庫。 它可靈活應(yīng)用到有無RTOS的程序中,采用C語言面向?qū)ο蟮乃悸穼?shí)現(xiàn)各個功能,盡可能最大化的復(fù)用代碼,目前為止工具包包含: 循環(huán)隊列、軟件定時器、事件集 。 網(wǎng)址:https://download.csdn.net/download/m0_38106923/87765476?spm=1001.2014.3001.550

    2024年02月03日
    瀏覽(22)
  • 對定時器中影子寄存器以及更新操作和更新事件理解

    對定時器中影子寄存器以及更新操作和更新事件理解

    本人是stm32初學(xué)者,近期在看定時器參考文檔時遇到些阻礙,再參考了眾多CSDN博主的文章后,得到了一些個人理解,將其發(fā)布出來,本文也對一些參考的文章進(jìn)行了不少復(fù)制粘貼同時也在這些文章必要位置加入了個人看法,文章鏈接附在最后 由于本人是初學(xué)者,本文一定存在

    2024年02月05日
    瀏覽(21)
  • 二、Qt定時器與文本編輯器制作《QT 入門到實(shí)戰(zhàn)》

    二、Qt定時器與文本編輯器制作《QT 入門到實(shí)戰(zhàn)》

    了解 qt 的 pixmap 了解 qt 的 label 如何顯示圖片 了解定時器的開啟 了解定時器的關(guān)閉 了解文件如何進(jìn)行讀取 了解 QFileDialog 的使用 了解了一個文本編輯器的基本編寫 鞏固了 connect 的使用 在 Qt 中使用 Label 可以顯示文本,但 Label 不止可以顯示文本,還可以用于圖片的顯示。 首

    2024年02月02日
    瀏覽(20)
  • VBA中類的解讀及應(yīng)用第八講:實(shí)現(xiàn)定時器功能的自定義類事件

    VBA中類的解讀及應(yīng)用第八講:實(shí)現(xiàn)定時器功能的自定義類事件

    《VBA中類的解讀及應(yīng)用》教程【10165646】是我推出的第五套教程,目前已經(jīng)是第一版修訂了。這套教程定位于最高級,是學(xué)完初級,中級后的教程。 類,是非常抽象的,更具研究的價值。隨著我們學(xué)習(xí)、應(yīng)用VBA的深入,有必要理解這些抽象的理論知識。對象,類,過程,方法

    2024年02月02日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包