概述
后台進程需要循環時第一時間想到的就是while
,但是涉及界面交互時就不那么適用了,例如在Qt主線程中直接使用循環就會導致界面卡死,此時可以使用多線程來解決這個問題,但只是做一些簡單的測試工具時,考慮線程大可不必。第二種方法就是在while
中加入qApp->processEvents()
避免界面凍結,但這個方法會造成關閉界面窗口時程序仍然在后台運行不能完全退出,解決這個問題就是先讓while
主動結束。另一個方法就是使用定時器周期執行事件來等效循環體,這樣整個過程被切為片運行就不會一直占用主線程造成界面不刷新了。
定時器語法
定義
QTimer *timer;
初始化
timer = new QTimer(this);
timer->setInterval(200);
connect(timer, SIGNAL(timeout()), this, SLOT(on_timeout()));
銷毀
delete timer;
信號槽
void MainWindow::on_timeout()
{
timer->stop();
if(do_something() != 0)
{
return;
}
timer->start();
}