定时器

Qt有2种方式实现定时器的功能

1.使用QTimer类

QTimer类非常简单使用,只需创建一个该对象,设置周期即可,在开启后,他会定时发出timeout()的信号,我们可以直接使用槽函数连接该信号。

1.1常用函数:

1
2
3
void setInterval(int msec); //设置周期
void start(std::chrono::milliseconds msec);
void start(void);//个人感觉它的start()应该是和QThread一样,创建了个新的线程

1.2使用信号槽

1
2
3
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, QOverload<>::of(&AnalogClock::update));
timer->start(1000);

使用 定时器 + 信号槽时,槽函数究竟在哪个线程被执行还是与connect()的连接方式有关!

2.使用timerEvent()事件处理函数

QObject对象可以通过QObject::startTimer()开启一个定时器,该定时器会按一定的周期发出QObject::timerEvent()事件。

我们通过重写该类的QObject::timerEvent()事件处理函数即可使用定时器来做某些事情了。

2.1常用函数

1
2
3
int QObject::startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer);
void QObject::killTimer(int id);
int QTimerEvent::timerId() const

一个类可以调用若干次startTimer()来创建若干个定时器