手動事件處理
最基本的解決方案是明確要求Qt在計算的某些時刻處理等待事件。要做到這一點,必須定期調用QCoreApplication::processEvents()。
下面的例子顯示如何做到這一點:
for (int i = 3; i <= sqrt(x) && isPrime; i += 2) { label->setText(tr("Checking %1...").arg(i)); if (x % i == 0) isPrime = false; QCoreApplication::processEvents(); if (!pushButton->isChecked()) { label->setText(tr("Aborted")); return; } }
這種方法有明顯的缺點。例如:假設你想要並行調用兩個類似這樣的循環,其中一個將會阻止另一個直到第一個完成(所以你不能分配計算能力到不同的任務)。這也會使應用程序的事件延遲反應。此外,代碼很難閱讀和分析,因此這種方法只適合單線程中處理的簡短的操作,如:啟動畫面和短期監控操作。
http://blog.csdn.net/liang19890820/article/details/51899233