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.