QBasicTimer

    xiaoxiao2022-06-27  154

    QBasicTimer


    学习一个概念大致 步骤应该是:

    1.从这个概念是什么2.然后指着一个东西问 这东西是 这个概念吗? 为什么是为什么不是?3.然后拿着东西去用 用的 步骤 或者顺序用的时候注意的坑 4.然后不断地去深入了解,大致进入迭代,然后回到步骤1的过程

    当前环境:Qt 4.8


    是什么?

    QBasicTimer 是一个基础的定时器。

    有什么?

    class Q_CORE_EXPORT QBasicTimer { int id; //当前保存的是id 或者叫 handle ,就是唯一指定的当前这个timer的 public: inline QBasicTimer() : id(0) {} inline ~QBasicTimer() { if (id) stop(); } inline bool isActive() const { return id != 0; } inline int timerId() const { return id; } void start(int msec, QObject *obj); void stop(); };

    从代码上看,QBasicTimer具有基本的使用接口

    isActive 是否在活动timerId 返回当前idstart 开始启动timerstop 停止timer

    如何用?

    看下说明文档:

    QBasicTimer 给对象提供 定时器事件 () The QBasicTimer class provides timer events for objects. 除非调用stop,否则会一直触发QTimerEvent事件

    源码

    /*! \fn void QBasicTimer::start(int msec, QObject *object) Starts (or restarts) the timer with a \a msec milliseconds timeout. The given \a object will receive timer events. \sa stop() isActive() QObject::timerEvent() */ void QBasicTimer::start(int msec, QObject *obj) { stop(); if (obj) id = obj->startTimer(msec); } /*! Stops the timer. \sa start() isActive() */ void QBasicTimer::stop() { if (id) { QAbstractEventDispatcher* eventDispatcher = QAbstractEventDispatcher::instance(); if (eventDispatcher) eventDispatcher->unregisterTimer(id); } id = 0; }

    start 代码说明

    代码看起来很简单, 就是 先停止判断对象的指针是否为真 为真,则启动 并设置当前的启动id 这看起来就是简单的命令模式 我们对QObject发送开始命令,并告诉他每隔多久启动timerevent事件但真正的代码执行不在timer这里 这样也就意味着,我们可以在Object对象内部调用Starttimer

    stop 代码说明

    这里代码 主要逻辑 判断id是否为真如果为真 获取事件队列管理取消注册当前id 最终不管怎样,id设置为0.

    最新回复(0)