Qt 定时器实现循环
概述
后台进程需要循环时第一时间想到的就是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();
}