Qt QObject定时器和QTimer具体使用及区别

Qt中定时器的使用有两种方法,一种是使用QObject类提供的定时器,还有一种就是使用QTimer类。QTime功能支持按照设定的毫秒来执行一段函数,而QObject则是将QTimer再封装了一层,提供了一些更便利的接口。两者本质上没有区别,但是实际应用的过程中还是各有特点以及应用场景的区别的,接下来本文将会详细的介绍两个定时器的优缺点以及应用场景和提供示例具体说明。

上一章节详细的介绍了QTime的使用,这一文会举例介绍QObject定时器的使用,QTime与QObject的区别。


转载请附上连接,本帖原创请勿照抄。

1.QTime定时器

QTime定时器主要通过实例化QTime函数、绑定QTime信号和关联槽函数来实现定时器的开启。

优点是:可以通过设置毫秒来对绑定的槽函数开始执行,执行即开始,结束则关闭;

缺点是:只可以执行一次,而QObject定时器则可以一直执行完美的解决了这一问题。

当然如果自己实现QTime多次一直循环也是可以不过肯定右点费劲不如直接使用QObject定时器来解决这一难题。上篇文章详细的举出示例来介绍QTime所以本文不在进行具体的示例编写,想了解可以直接点开有详细示例。

2.QObject定时器

QObject::startTimer():可以把一个一毫秒为单位的时间间隔作为参数来开始定时器,这个函数返回一个唯一的整数定时器的标识符。这个定时器开始就会在每一个时间间隔"触发",直到明确的使用这个定时器的标识符来调用QObject::killTimer()结束。

QObject定时器主要通过实例化重写timerEvent时间事件:当定时器触发时,应用程序会发送一个QTimerEvent。在事件循环中,处理器按照事件队列的顺序来处理定时器事件。当处理器正忙于其它事件处理时,定时器就不能立即处理。

扫描二维码关注公众号,回复: 13116726 查看本文章

int id1=startTimer(1000);可以获取QObject定时器的ID。

当定时器事件发生时,虚函数timerEvent()随着QTimerEvent事件参数类一起被调用,重载这个函数可以获得定时器事件。

QObject可以多个开启,但是需要注意ID号,因为每次开启一个ID号随机,所以需要注意记录好ID号。

.h
protected:
    virtual void timerEvent(QTimerEvent*event);
.cpp
//构造函数
//开启一个定时器
id1=startTimer(1000);
qDebug()<<QString::number(id1);//打印定时器ID

//时间事件
void MainWindow::timerEvent(QTimerEvent*event)
{
    //TODO 业务代码
}

//关闭定时器
killTimer(1);

 

猜你喜欢

转载自blog.csdn.net/qq_37529913/article/details/111468642