QT中使用QEventLoop來實現事件迴圈

2021-08-22 16:11:15 字數 1328 閱讀 4251

這裡的意思是說qeventloop類為我們提供了一種進入和退出乙個事件迴圈的方法。在任何時候,你都可以建立乙個qeventloop例項,然後呼叫exec()來啟動乙個事件迴圈,在這個迴圈期間,可以呼叫exit()來強制使exct()返回。

事件迴圈是乙個無限「迴圈」,當呼叫事件的exec()的時候,程式就會在exec()裡面無限迴圈,讓在exec()後面的程式得不到執行的機會,除非程式從exec()裡面跳出來。  

下面介紹下使用的方法,其實使用很簡單

(1)例項化

qeventloop loop;
(2)啟動事件迴圈

//以上省略了部分**,這是使用http中的post來傳送檔案到伺服器

qnetworkreply *postreply = m_pnetmanager->post(request, qbt); //post方式到本地伺服器

connect(postreply, signal(finished()), this, slot(postfilereplyfinished())); //成功後會有返回響應

loop->exec(); //設定等待,若檔案成功傳送,則退出等待

(3)在其他的響應函式中退出迴圈

void widget::postfilereplyfinished()}}

我實現的功能是,傳送檔案後,就進入事件迴圈,當接收到返回的json資料後,判斷資料是否正確,正確的話就退出事件迴圈。

其實還有一種方法來實現事件迴圈的退出。就是使用qt中的訊號與槽的機制,在初始化的時候,將 reply的響應與loop的quit連線起來。

這樣的話就更簡潔了。可是有個問題就是,一收到reply就退出事件的迴圈,如果想要判斷一下還是用前面的方法比較好。

QEventLoop 的使用兩例

qt 是事件驅動的,所以當你用qt的時候,幾乎時時刻刻和 qeventloop 打交道 只是你可能沒有意識到 qdialog exec qthread exec qdrag exec qmenu exec 在前面列出的這些常見函式的背後,都有各自的qeventloop,可能是我們很少有機會想到自己顯...

QEventLoop 的使用兩例

qt 是事件驅動的,所以當你用qt的時候,幾乎時時刻刻和 qeventloop 打交道 只是你可能沒有意識到 qdialog exec qthread exec qdrag exec qmenu exec 在前面列出的這些常見函式的背後,都有各自的qeventloop,可能是我們很少有機會想到自己顯...

QEventLoop 的使用兩例

qt 是事件驅動的,所以當你用qt的時候,幾乎時時刻刻和 qeventloop 打交道 只是你可能沒有意識到 qdialog exec qthread exec qdrag exec qmenu exec 在前面列出的這些常見函式的背後,都有各自的qeventloop,可能是我們很少有機會想到自己顯...