介绍Qt的三种定时器QObject内置定时器,QBasicTimer,QTimer。
使用startTimer开启定时器,使用killTimer(int id)接口来关闭指定的定时器。 启动定时器后会在对应间隔时间触发timerEvent事件。 示例:
class Object : public QObject {
Q_OBJECT
public:
Object()
{
startTimer(1000);
}
protected:
void timerEvent(QTimerEvent *event) { }
};
QBasicTimer类为对象提供定时器事件。
QBasicTimer特点快速、轻量级和低级类。对于需要降低使用多个定时器开销的应用程序,QBasicTimer可能是一个不错的选择。如果是一般使用情况建议使用更高级别的QTimer类而不是此类。
使用start
接口来设置定时时间与定时事件的接收对象。
示例:
class Object : public QObject {
Q_OBJECT
public:
Object() { }
protected:
void timerEvent(QTimerEvent *event) { }
}
Object object;
QBasicTimer basicTimer;
basicTimer.start(500, &object);
QTimer类提供重复和单次定时器。 QTimer类为定时器提供高级编程接口。创建一个QTimer实例,将其timeout()信号连接到对应的槽中,然后调用start()开启定时器,每隔一段时间会发出timeout()信号。 示例:
class Object : public QObject {
Q_OBJECT
public:
Object()
{
connect(&m_timer, SIGNAL(timeout()), this, SLOT(onTimeout()));
m_timer.start(1000);
}
private slots:
void onTimeout() { }
private:
QTimer m_timer;
};
Qt::TimerType | 解释 |
---|---|
Qt::PreciseTimer | 精确的定时器试图保持毫秒精度 |
Qt::CoarseTimer | 粗略的定时器试图将精度保持在所需间隔的5%以内 |
Qt::VeryCoarseTimer | 非常粗略的定时器 |
特别地Qt::VeryCoarseTimer
非常粗略的意思是精度为±500ms。例如,10500ms的间隔将四舍五入为11000ms,而10400ms会置为10000ms。
QTimer::singleShot
接口。QObject::timerEvent
捕获定时器事件,如果存在多个定时器源,可以使用timerId来判断确定那个定时器事件。id1 = startTimer(1000); // 开启一个1秒定时器,返回其定时器ID
id2 = startTimer(2000); // 开启一个2秒定时器,返回其定时器ID
id3 = startTimer(3000); // 开启一个3秒定时器,返回其定时器ID