QBasicTimer

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 返回当前id
  • start 开始启动timer
  • stop 停止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.
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值