QT 线程内定时器QTimer无效问题解决方案

在大批量数据处理时,需要长时间等待,这就需要有进度条显示处理进度,因此也就需要建立一个定时器,来实时更新进度条。

数据处理在单独的子线程中进行,在子线程中new一个定时器,但是定时器并没能实时触发更新(update())函数,直到数据处理完了之后,才会触发,也就是说数据处理堵塞了定时器的触发,为了实现定时器的实时触发,则需在子线程内新建一个线程来运行定时器,如下代码所示:

1     timer = new QTimer();
2     timer->start(100);
3 
4     timerThread = new QThread;
5     timer->moveToThread(timerThread);
6 
7     connect(timer, SIGNAL(timeout()), this, SLOT(updateProgressBar()), Qt::DirectConnection);
8     timerThread->start();

这样,就可以实时更新进度条了。

参考链接:http://blog.csdn.net/zgrjkflmkyc/article/details/41381327

原文地址:https://www.cnblogs.com/xingzhensun/p/6610119.html