QTimer 类

QTimer class provides repetitive and single-shot timers. 更多...

头: #include <QTimer>
qmake: QT += core
继承: QObject

特性

公共函数

QTimer (QObject * parent = nullptr)
virtual ~QTimer ()
QMetaObject::Connection callOnTimeout (Functor slot , Qt::ConnectionType connectionType = ...)
QMetaObject::Connection callOnTimeout (const QObject * context , Functor slot , Qt::ConnectionType connectionType = ...)
QMetaObject::Connection callOnTimeout (const QObject * receiver , PointerToMemberFunction slot , Qt::ConnectionType connectionType = ...)
int interval () const
std::chrono::milliseconds intervalAsDuration () const
bool isActive () const
bool isSingleShot () const
int remainingTime () const
std::chrono::milliseconds remainingTimeAsDuration () const
void setInterval (int msec )
void setInterval (std::chrono::milliseconds value )
void setSingleShot (bool singleShot )
void setTimerType (Qt::TimerType atype )
void start (std::chrono::milliseconds msec )
int timerId () const
Qt::TimerType timerType () const

公共槽

void start (int msec )
void start ()
void stop ()

信号

void timeout ()

静态公共成员

void singleShot (int msec , const QObject * receiver , const char * member )
void singleShot (int msec , Qt::TimerType timerType , const QObject * receiver , const char * member )
void singleShot (int msec , const QObject * receiver , PointerToMemberFunction method )
void singleShot (int msec , Qt::TimerType timerType , const QObject * receiver , PointerToMemberFunction method )
void singleShot (int msec , Functor functor )
void singleShot (int msec , Qt::TimerType timerType , Functor functor )
void singleShot (int msec , const QObject * context , Functor functor )
void singleShot (int msec , Qt::TimerType timerType , const QObject * context , Functor functor )
void singleShot (std::chrono::milliseconds msec , const QObject * receiver , const char * member )
void singleShot (std::chrono::milliseconds msec , Qt::TimerType timerType , const QObject * receiver , const char * member )
const QMetaObject staticMetaObject

重实现保护函数

virtual void timerEvent (QTimerEvent * e ) override

详细描述

QTimer class provides repetitive and single-shot timers.

QTimer class provides a high-level programming interface for timers. To use it, create a QTimer , connect its timeout () 信号到适当的槽,并调用 start ()。从那时起,它将发射 timeout () 信号按常量间隔。

一秒 (1000 毫秒) 计时器范例 (来自 指针式时钟 范例):

    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer->start(1000);
					

从那时起, update() 槽被每秒调用。

可以把计时器设为仅超时一次,通过调用 setSingleShot (true)。也可以使用静态 QTimer::singleShot () 函数在指定间隔后调用槽:

    QTimer::singleShot(200, this, SLOT(updateCaption()));
					

In multithreaded applications, you can use QTimer in any thread that has an event loop. To start an event loop from a non-GUI thread, use QThread::exec ()。Qt 使用计时器的 线程倾向性 确定哪个线程将发射 timeout() 信号。因此,必须在其线程中启动和停止计时器;从另一线程启动计时器,是不可能的。

As a special case, a QTimer with a timeout of 0 will time out as soon as all the events in the window system's event queue have been processed. This can be used to do heavy work while providing a snappy user interface:

    QTimer *timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(processOneThing()));
    timer->start();
					

从那时起, processOneThing() will be called repeatedly. It should be written in such a way that it always returns quickly (typically after processing one data item) so that Qt can deliver events to the user interface and stop the timer as soon as it has done all its work. This is the traditional way of implementing heavy work in GUI applications, but as multithreading is nowadays becoming available on more and more platforms, we expect that zero-millisecond QTimer objects will gradually be replaced by QThread s.

精度和计时器分辨率

计时器的准确性取决于底层操作系统和硬件。大多数平台支持 1 毫秒的分辨率,虽然计时器的准确性在许多真实世界状况下不会等于此分辨率。

精度还取决于 计时器类型 。对于 Qt::PreciseTimer , QTimer will try to keep the accuracy at 1 millisecond. Precise timers will also never time out earlier than expected.

For Qt::CoarseTimer and Qt::VeryCoarseTimer types, QTimer may wake up earlier than expected, within the margins for those types: 5% of the interval for Qt::CoarseTimer 和 500 ms 为 Qt::VeryCoarseTimer .

所有计时器类型的超时均可能晚于期望,若系统繁忙 (或无法提供要求的精度)。在这种超时超限情况下,Qt 会发射 timeout () 仅一次,即使多个超时已过期,然后再继续原始间隔。

替代 QTimer

替代使用 QTimer is to call QObject::startTimer () 为对象并重实现 QObject::timerEvent () 事件处理程序在类中 (必须继承 QObject )。缺点是 timerEvent () 不支持如单次计时器 (或信号) 的高级特征。

另一替代是 QBasicTimer 。通常不那么麻烦相比使用 QObject::startTimer () 直接。见 计时器 了解所有 3 种途径的概述。

某些操作系统限制可能使用的计时器数;Qt 试着绕过这些局限性。

另请参阅 QBasicTimer , QTimerEvent , QObject::timerEvent (), 计时器 , 指针式时钟范例 ,和 摆动范例 .

特性文档编制

active : const bool

此布尔特性为 true 若计时器正在运行;否则 false。

该特性在 Qt 4.3 引入。

访问函数:

bool isActive () const

interval : int

此特性保持超时间隔 (以毫秒为单位)

此特性的默认值为 0。 QTimer 0 超时间隔会在窗口系统的事件队列的所有事件,已被处理后尽快超时。

设置活动计时器的间隔会改变其 timerId ().

访问函数:

int interval () const
void setInterval (int msec )
void setInterval (std::chrono::milliseconds value )

另请参阅 singleShot .

remainingTime : const int

此特性保持剩余时间 (以毫秒为单位)

返回计时器的剩余值 (以毫秒为单位) 直到超时。若计时器处于非活动状态,返回值会为 -1。若计时器过期,返回值会为 0。

该特性在 Qt 5.0 引入。

访问函数:

int remainingTime () const

另请参阅 interval .

singleShot : bool

此特性保持计时器是否为单次计时器

单发计时器仅激发一次,非单发定时器被激发每隔 interval 毫秒。

此特性的默认值为 false .

访问函数:

bool isSingleShot () const
void setSingleShot (bool singleShot )

另请参阅 interval and singleShot ().

timerType : Qt::TimerType

控制计时器的精度

此特性的默认值为 Qt::CoarseTimer .

访问函数:

Qt::TimerType timerType () const
void setTimerType (Qt::TimerType atype )

另请参阅 Qt::TimerType .

成员函数文档编制

QTimer:: QTimer ( QObject * parent = nullptr)

构造计时器采用给定 parent .

[virtual] QTimer:: ~QTimer ()

销毁计时器。

QMetaObject::Connection QTimer:: callOnTimeout ( Functor slot , Qt::ConnectionType connectionType = ...)

这是重载函数。

创建连接从 timeout () 信号到 slot ,并返回要连接的句柄。

此方法为方便起见提供。它相当于调用 QObject::connect(timer, &QTimer::timeout, timer, slot, connectionType) .

该函数在 Qt 5.12 引入。

另请参阅 QObject::connect () 和 timeout ().

QMetaObject::Connection QTimer:: callOnTimeout (const QObject * context , Functor slot , Qt::ConnectionType connectionType = ...)

此函数重载 callOnTimeout ().

创建连接从 timeout () 信号到 slot 以放置在特定事件循环 context ,并返回要连接的句柄。

此方法为方便起见提供。它相当于调用 QObject::connect(timer, &QTimer::timeout, context, slot, connectionType) .

该函数在 Qt 5.12 引入。

另请参阅 QObject::connect () 和 timeout ().

QMetaObject::Connection QTimer:: callOnTimeout (const QObject * receiver , PointerToMemberFunction slot , Qt::ConnectionType connectionType = ...)

此函数重载 callOnTimeout ().

创建连接从 timeout () 信号到 slot receiver 对象。返回连接的句柄。

此方法为方便起见提供。它相当于调用 QObject::connect(timer, &QTimer::timeout, receiver, slot, connectionType) .

该函数在 Qt 5.12 引入。

另请参阅 QObject::connect () 和 timeout ().

std::chrono::milliseconds QTimer:: intervalAsDuration () const

把此计时器的间隔返回作为 std::chrono::milliseconds 对象。

该函数在 Qt 5.8 引入。

另请参阅 interval .

bool QTimer:: isActive () const

返回 true 若计时器正在运行 (待决);否则返回 false。

注意: Getter 函数对于特性 active .

std::chrono::milliseconds QTimer:: remainingTimeAsDuration () const

把此计时器对象的剩余时间返回作为 std::chrono::milliseconds 对象。若此计时器到期 (或过期),返回值为 std::chrono::milliseconds::zero() 。若找不到剩余时间 (或计时器未激活),此函数返回负持续时间。

该函数在 Qt 5.8 引入。

另请参阅 remainingTime ().

[static] void QTimer:: singleShot ( int msec , const QObject * receiver , const char * member )

此静态函数调用槽,在给定时间间隔后。

使用此函数非常方便,因为不需要麻烦采用 timerEvent 或创建本地 QTimer 对象。

范例:

#include <QApplication>
#include <QTimer>
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QTimer::singleShot(600000, &app, SLOT(quit()));
    ...
    return app.exec();
}
					

此范例程序在 10 分钟 (600,000 毫秒) 后自动终止。

receiver 是接收对象而 member 是槽。时间间隔为 msec 毫秒。

注意: 此函数是 可重入 .

另请参阅 setSingleShot () 和 start ().

[static] void QTimer:: singleShot ( int msec , Qt::TimerType timerType , const QObject * receiver , const char * member )

这是重载函数。

此静态函数调用槽,在给定时间间隔后。

使用此函数非常方便,因为不需要麻烦采用 timerEvent 或创建本地 QTimer 对象。

receiver 是接收对象而 member 是槽。时间间隔为 msec 毫秒。 timerType 影响计时器精度。

注意: 此函数是 可重入 .

另请参阅 start ().

[static] void QTimer:: singleShot ( int msec , const QObject * receiver , PointerToMemberFunction method )

这是重载函数。

此静态函数调用其成员函数为 QObject 在给定时间间隔后。

使用此函数非常方便,因为不需要麻烦采用 timerEvent 或创建本地 QTimer 对象。

receiver 是接收对象而 method 是成员函数。时间间隔为 msec 毫秒。

receiver 在间隔发生之前被销毁,方法将不会被调用。函数将运行在其线程中为 receiver 。接收者线程必须拥有正在运行的 Qt 事件循环。

注意: 此函数是 可重入 .

该函数在 Qt 5.4 引入。

另请参阅 start ().

[static] void QTimer:: singleShot ( int msec , Qt::TimerType timerType , const QObject * receiver , PointerToMemberFunction method )

这是重载函数。

此静态函数调用其成员函数为 QObject 在给定时间间隔后。

使用此函数非常方便,因为不需要麻烦采用 timerEvent 或创建本地 QTimer 对象。

receiver 是接收对象而 method 是成员函数。时间间隔为 msec 毫秒。 timerType 影响计时器精度。

receiver 在间隔发生之前被销毁,方法将不会被调用。函数将运行在其线程中为 receiver 。接收者线程必须拥有正在运行的 Qt 事件循环。

注意: 此函数是 可重入 .

该函数在 Qt 5.4 引入。

另请参阅 start ().

[static] void QTimer:: singleShot ( int msec , Functor functor )

这是重载函数。

此静态函数调用 functor 在给定时间间隔后。

使用此函数非常方便,因为不需要麻烦采用 timerEvent 或创建本地 QTimer 对象。

时间间隔为 msec 毫秒。

注意: 此函数是 可重入 .

该函数在 Qt 5.4 引入。

另请参阅 start ().

[static] void QTimer:: singleShot ( int msec , Qt::TimerType timerType , Functor functor )

这是重载函数。

此静态函数调用 functor 在给定时间间隔后。

使用此函数非常方便,因为不需要麻烦采用 timerEvent 或创建本地 QTimer 对象。

时间间隔为 msec 毫秒。 timerType 影响计时器精度。

注意: 此函数是 可重入 .

该函数在 Qt 5.4 引入。

另请参阅 start ().

[static] void QTimer:: singleShot ( int msec , const QObject * context , Functor functor )

这是重载函数。

此静态函数调用 functor 在给定时间间隔后。

使用此函数非常方便,因为不需要麻烦采用 timerEvent 或创建本地 QTimer 对象。

时间间隔为 msec 毫秒。

context 在间隔发生之前被销毁,方法将不会被调用。函数将运行在其线程中为 context 。上下文线程必须拥有正在运行的 Qt 事件循环。

注意: 此函数是 可重入 .

该函数在 Qt 5.4 引入。

另请参阅 start ().

[static] void QTimer:: singleShot ( int msec , Qt::TimerType timerType , const QObject * context , Functor functor )

这是重载函数。

此静态函数调用 functor 在给定时间间隔后。

使用此函数非常方便,因为不需要麻烦采用 timerEvent 或创建本地 QTimer 对象。

时间间隔为 msec 毫秒。 timerType 影响计时器精度。

context 在间隔发生之前被销毁,方法将不会被调用。函数将运行在其线程中为 context 。上下文线程必须拥有正在运行的 Qt 事件循环。

注意: 此函数是 可重入 .

该函数在 Qt 5.4 引入。

另请参阅 start ().

[static] void QTimer:: singleShot ( std::chrono::milliseconds msec , const QObject * receiver , const char * member )

这是重载函数。

此静态函数调用槽,在给定时间间隔后。

使用此函数非常方便,因为不需要麻烦采用 timerEvent 或创建本地 QTimer 对象。

receiver 是接收对象而 member 是槽。时间间隔被给出由持续时间对象 msec .

注意: 此函数是 可重入 .

该函数在 Qt 5.8 引入。

另请参阅 start ().

[static] void QTimer:: singleShot ( std::chrono::milliseconds msec , Qt::TimerType timerType , const QObject * receiver , const char * member )

这是重载函数。

此静态函数调用槽,在给定时间间隔后。

使用此函数非常方便,因为不需要麻烦采用 timerEvent 或创建本地 QTimer 对象。

receiver 是接收对象而 member 是槽。时间间隔被给出由持续时间对象 msec timerType 影响计时器精度。

注意: 此函数是 可重入 .

该函数在 Qt 5.8 引入。

另请参阅 start ().

[slot] void QTimer:: start ( int msec )

启动 (或重启) 计时器采用超时间隔 msec 毫秒。

若计时器已经在运行,它会被 stopped 并重启。

singleShot 为 true,计时器将仅被激活一次。

[slot] void QTimer:: start ()

此函数重载 start()。

启动 (或重启) 计时器采用指定超时在 interval .

若计时器已经在运行,它会被 stopped 并重启。

singleShot 为 true,计时器将仅被激活一次。

void QTimer:: start ( std::chrono::milliseconds msec )

这是重载函数。

启动 (或重启) 计时器,采用超时持续时间 msec 毫秒。

若计时器已经在运行,它会被 stopped 并重启。

singleShot 为 true,计时器将仅被激活一次。

该函数在 Qt 5.8 引入。

[slot] void QTimer:: stop ()

停止计时器。

另请参阅 start ().

[signal] void QTimer:: timeout ()

此信号被发射当计时器超时。

注意: 这是私有信号。它可以用于信号连接,但不能由用户发射。

另请参阅 interval , start (),和 stop ().

[override virtual protected] void QTimer:: timerEvent ( QTimerEvent * e )

重实现自 QObject::timerEvent ().

int QTimer:: timerId () const

返回计时器的 ID,若计时器正在运行;否则返回 -1。