QTimer的一点点误区

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值