一、環境介紹
作業系統: win10 64位
QT版本: QT5.12.6
二、QEventLoop類
QEventLoop類提供了一種進入和離開事件循環的方法。
在任何時候,你都可以建立一個QEventLoop對象并對其調用exec(),以啟動本地事件循環,在事件循環中,調用exit()将強制exec()傳回。另請參見QAbstractEventDispatcher。
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();
.........
繼續執行代碼.
}