Qt非阻塞延時
I wrote asuper simple delay function for an application I developed in Qt.
I wouldadvice u to use this code against sleep function as it won't let ur GUI tofreeze.
voiddelay(int seconds)
{
QTime dieTime=QTime::currentTime().addSecs(seconds);
while( QTime::currentTime() < dieTime )
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
QApplication::processEvents()
在Qt應用程序中,存在一個事件循環,對應着一個事件隊列。對於單線程程序來說,只有一個事件隊列。一個新事件首先添加到隊列中,然後等待被處理。如果某個事件處理的時間有點長,就會影響其他事件的處理時間。此時,應用程序就會對其他事件無響應。爲了解決此問題,一個比較簡單的方法就是不停地調用QApplication::processEvents()函數。該函數告訴Qt去處理任何末決的事件,然後將控制權返還給調用者。事件上,Qapplication::exec()的簡化模型就是在一個while循環中不斷調用processEvents()函數。
在處理需要長時間的操作時,爲了保持界面的響應,有幾種方法可以解決。
1.使用多線程,分別用於處理不同的響應。
2.在複雜操作的過程中頻繁調用QApplication::processEvents()。這個函數告訴Qt處理所有那些還沒有被處理的各類事件,然後將控制權返還給調用者。實際上QApplication::exec()就是一個不停調用processEvents()
http://stackoverflow.com/questions/3752742/how-do-i-create-a-pause-wait-function-using-qt