天天看點

QT應用程式設計: 使用QEventLoop實作事件循環

一、環境介紹

作業系統: win10 64位

QT版本:  QT5.12.6

二、QEventLoop類

QEventLoop類提供了一種進入和離開事件循環的方法。

在任何時候,你都可以建立一個QEventLoop對象并對其調用exec(),以啟動本地事件循環,在事件循環中,調用exit()将強制exec()傳回。另請參見QAbstractEventDispatcher。

QT應用程式設計: 使用QEventLoop實作事件循環

QEventLoop 正常運用環境 :   在主界面裡執行某個代碼之前,需要等待某個條件成立,但是這個條件是其他線程異步通知的;這時,主線程需要等待這個條件成立才能繼續執行;這時如果不想卡主界面,就可以使用QEventLoop完成。

示例1:

QEventLoop loop;
void widget::on_pushButton1_clicked()
{
........ 需要等待某個條件成立
    loop.exec();
.........
繼續執行代碼.
}
 
//槽函數: 等待的條件滿足時進入
void widget::on_timeclicked()
{
..........
loop.exit();  //退出事件循環
}      

示例2:

void widget::on_pushButton_clicked()
{
........ 需要等待100毫秒的時間.等待某個條件成立
    //事件循環: 在指定時間後執行某件事. 不卡UI界面
    QEventLoop loop;
    QTimer::singleShot(100, &loop, SLOT(quit()));
    loop.exec();
.........
繼續執行代碼.
}      

繼續閱讀