一般情况下,在主线程内等待程序响应和定时完成某些任务的时候基本都使用到QT自带的类:
<QTimer>,其实现了计时器的使用。但是在有些情况下我们也希望能够在子线程内使用到计时器,此篇文章记录自己在子线程内使用计时器:
重点:
1、不可以在构造函数内新建计时器对象,子线程在主线程内进行初始化,子线程的构造函数也是在主线程内执行,如果放在构造函数内那么也是在主线程内新建了一个计时器对象
2、新建的计时器对象不可指定父对象为this
3、要在子线程内开启事件循环
4、在run函数内进行新建计时器对象且start,如果要在其他函数内进行start,那么要设置信号与槽连接的第五个参数为Qt::DirectConnection
使用实例:
第一种:不停循环执行的计时器,设置的时间间隔一到便会触发timeout信号,执行相关连接的槽函数
run函数:
停止计时器和删除计时器实例:
第二种:单次计时器,到了时间便执行一次连接的槽函数
可连接槽函数和lambda函数
附上官方文档对于单次计时器的使用方法:
关于计时器类可参考官方文档:QTimer 类 |Qt核心6.5.0
在qml内使用计时器:
属性和函数可参考官方文档: