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与槽连接杂糅在一起。
就这么一个小细节困扰了我很长时间,在此记录分享一下防止他人踩坑。