qt延時之QApplication::processEvents詳解
阿新 • • 發佈:2019-01-02
應用場景一:處理密集耗時的事情
有時候需要處理一些跟介面無關的但非常耗時的事情,這些事情跟介面在同一個執行緒中,由於時間太長,導致介面無法響應,處於“假死”狀態。例如:在應用程式中儲存檔案到硬碟上,從開始儲存直到檔案儲存完畢,程式不響應使用者的任何操作,視窗也不會重新繪製,從而處於“無法響應”狀態,這是一個非常糟糕的體驗 。
在這種情況下,有一種方法是使用多執行緒,即在子執行緒中處理檔案儲存,主執行緒負責介面相關。
而如果不想使用多執行緒,最簡單的辦法就是在檔案儲存過程中頻繁呼叫QApplication::processEvents()。該函式的作用是讓程式處理那些還沒有處理的事件,然後再把使用權返回給呼叫者。
bool MyApp::writeFile(const QString &filename) { QFile file(filename); ... QApplication::setOverrideCursor(Qt::WaitCursor); for(int r = 0; r != rowCount; ++r) { for(int c = 0; c != colCount; ++c) { out << table(r,c); qApp.processEvents(); } } QApplication::restoreOverrideCursor(); }
應用場景二:非阻塞延時
QTime time;
time.start();
while(time.elapsed() < 1000) //等待時間流逝1秒鐘
QCoreApplication::processEvents(); //不停地處理事件,讓程式保持響應