0
点赞
收藏
分享

微信扫一扫

QTimer的一点点误区

自由的美人鱼 2022-01-25 阅读 87

对于Qt的信号槽,正常情况都能够发射和接收,但是对于QTimer,它有一个需要注意的地方就是:
在子线程中(就是那个run函数里面,它是运行在子线程中的)创建QTimer,发现不起作用,这是因为QTimer是基于
事件循环的,qtimer又是一个很特殊的东西,所以在run中,必须要进入qt的事件循环才有用,并且new的时候,还不能
指定parent为this。
但是在qthread的构造函数中,qtimer却是可以的,因为它也是在主线程中构造的么。

定时器不起作用

QThreadXXX::run()
{
QTimer* p = new QTimer();
p->start(1000);
....
}

定时器起作用

QThreadXXX::run()
{
QTimer* p = new QTimer();//不要指定parent为this。
p->start(1000);
....
exec();//进入事件循环,定时器起作用,其实QThread::run默认就调用了exec,所以使用moveToThread也是可以的。
}
举报

相关推荐

0 条评论