Qt 延時之QApplication::processEvents詳解


應用場景一:處理密集耗時的事情

  有時候需要處理一些跟界面無關的但非常耗時的事情,這些事情跟界面在同一個線程中,由於時間太長,導致界面無法響應,處於“假死”狀態。例如:在應用程序中保存文件到硬盤上,從開始保存直到文件保存完畢,程序不響應用戶的任何操作,窗口也不會重新繪制,從而處於“無法響應”狀態,這是一個非常糟糕的體驗 。
     在這種情況下,有一種方法是使用多線程,即在子線程中處理文件保存,主線程負責界面相關。
     而如果不想使用多線程,最簡單的辦法就是在文件保存過程中頻繁調用QApplication::processEvents()。該函數的作用是讓程序處理那些還沒有處理的事件,然后再把使用權返回給調用者。

 1 bool MyApp::writeFile(const QString &filename)  2 {  3  QFile file(filename);  4 ...  5  QApplication::setOverrideCursor(Qt::WaitCursor);  6      for(int r = 0; r != rowCount; ++r)  7  {  8           for(int c = 0; c != colCount; ++c)  9  { 10                out << table(r,c); 11  qApp.processEvents(); 12  } 13  } 14  QApplication::restoreOverrideCursor(); 15 }

應用場景二:非阻塞延時

1 QTime time; 2 time.start(); 3 while(time.elapsed() < 1000)             //等待時間流逝1秒鍾
4     QCoreApplication::processEvents();   //不停地處理事件,讓程序保持響應

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM