对于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也是可以的。
}