QT学习记录---QTimer关闭后重启会出现多个计时器同时运作

QTimer在启动后如果槽连接放于start之后,重启计时器会导致多个计时器并行运行。正确做法是先创建QTimer,连接槽,再启动。否则,重新start会触发多次槽函数,造成逻辑错误。注意槽连接和start的顺序以避免额外的计时器实例。
摘要由CSDN通过智能技术生成

QTimer类可以提供定时器的功能,其很容易使用:先创建一个QTimer,使用start()来开始并且把它的timeout()连接到适当的槽。当这段时间过去了,它将会发射timeout()信号。注意当QTimer的父对象被销毁时,它也会被自动销毁。

1.先创建一个QTimer

QTimer *timer = new QTimer( myObject );

2.连接到适当的槽

connect( timer, SIGNAL(timeout()), myObject, SLOT(timerDone()) );

3.使用start开始计时器,stop停止计时器

timer->start( 2000, TRUE ); // 2秒单触发定时器

以上便是使用QTimer的一个简单过程。但是在实际使用中我却发现一个问题,就是如果将槽连接写在start之后,

(以下是错误示范)

QTimer *timer = new QTimer( myObject );

timer->start( 2000, TRUE );

connect( timer, SIGNAL(timeout()), myObject, SLOT(timerDone()) );

那么停止计时器并重启之后会新增一个计时器并且原有的计时器仍然存在。

这主要是因为重新start之后会重新调用一次槽,导致会出现多个计时器同时运作。

千万要注意代码逻辑不要将start与槽连接杂糅在一起。

就这么一个小细节困扰了我很长时间,在此记录分享一下防止他人踩坑。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值