低级定时器之QBasicTimer

来源:互联网 发布:mac os vmware 镜像 编辑:程序博客网 时间:2024/06/09 13:45

       QBasicTimers 是一个很快的、轻量级的定时器类,它主要被Qt内部使用。所以,我们一般不建议在上层应用程序中直接使用这个类去做定时器工作。在开发应用程序时,我们一般推荐使用QTimer类和QObject的成员函数startTimer来启动定时器。在此,只是出于学习还简单介绍一下QBasicTimer类的使用。还有,该定时器是一种重复性定时器,即它在启动后会不断的向应用程序发送定时器事件,直到你收到调用stop() 时才停止。

        当然,这个类的使用也非常简单。一般我们只需要创建一个该类的对象,然后调用它的start() 方法即可。start()方法的具体声明如下:

void QBasicTimer::start(int msec, QObject *object)void QBasicTimer::start(int msec, Qt::TimerType timerType, QObject *obj)

其中,msec参数表示定时器的时间间隔,以毫秒为单位,object参数表示接受定时器到期事件的对象,timerType参数表示启动的定时器的类型。具体定义如下:

Qt::PreciseTimer    0  Precise timers try to keep millisecond accuracyQt::CoarseTimer     1  Coarse timers try to keep accuracy within 5% of the desired intervalQt::VeryCoarseTimer 2  Very coarse timers only keep full second accuracy


另外,使用start() 函数启动定时器后,我们随时可以使用stop() 函数来停止它;使用isActive() 函数来判断一个定时器是否正在运行,“正在运行”表示它已经被启动,还为达到超时时间,并且未被stop() 停止;可以通过timerId() 来获得定时器的id。

       下面,我们在QtCreator中新建一个窗口程序,往窗口上托入一个列表控件QListWidget,然后,使用这个定时器,每秒向列表中添加一个字符串。步骤如下:

       1.新建一个Qt Widget应用程序,命名为BasicTimer,选择QWidget作为我们窗口的基类。






       2.双击widget.ui文件,进入Qt的设计模式,向窗口上拖一个QListWidget

   


         


    3.回到编辑模式,在widget.h中添加一个QBasicTimer的对象,并重新QWidget类的timerEvent(QTimerEvent* event)虚函数。该函数就是用来响应定时器的timeout事件的。代码如下:

#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QBasicTimer>#include <QTimerEvent>namespace Ui {class Widget;}class Widget : public QWidget{    Q_OBJECTpublic:    explicit Widget(QWidget *parent = 0);    ~Widget();protected:    void timerEvent(QTimerEvent *event);private:    QBasicTimer timer;private:    Ui::Widget *ui;};#endif // WIDGET_H

        4.在widget.cpp 源文件中实现timerEvent() 函数即可。代码如下:

#include "widget.h"#include "ui_widget.h"Widget::Widget(QWidget *parent) :    QWidget(parent),    ui(new Ui::Widget){    ui->setupUi(this);    timer.start(1000, Qt::PreciseTimer, this);}void Widget::timerEvent(QTimerEvent *event){    ui->listWidget->addItem("timeout");}Widget::~Widget(){    timer.stop();    delete ui;}

在此,我们在构造函数中,通过QBasicTimer的start() 函数,开启一个高精度的定时器,定时间隔为1秒,让当前窗口来接收定时器到期事件。在timerEvent() 中,我们简单的向窗口上的list控件中添加一个字符串。当程序退出,我们在窗口的析构函数中调用stop() 停止定时器。

        5. 点击左下角的运行按钮,即可看到结果。每隔1秒,都会向list控件中添加一个字符串。如下:

                    










0 0