QTimer 类

The QTimer 类提供重复 (和单发) 计时器。 更多...

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

特性

公共函数

QTimer (QObject * parent = Q_NULLPTR)
~QTimer ()
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 )

重实现保护函数

virtual void timerEvent (QTimerEvent * e )

详细描述

The QTimer 类提供重复 (和单发) 计时器。

The QTimer 类为计时器提供高级编程接口。要使用它,创建 QTimer ,连接其 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()));
					

在多线程应用程序中,可以使用 QTimer 在拥有事件循环的任何线程中。要从非 GUI 线程启动事件循环,使用 QThread::exec ()。Qt 使用计时器的 线程亲缘关系 确定哪个线程将发射 timeout() 信号。因此,必须在其线程中启动和停止计时器;从另一线程启动计时器,是不可能的。

作为特殊情况, QTimer 采用 0 超时将尽快超时,在已处理窗口系统事件队列中的所有事件后。可以使用这做繁重工作,当提供敏捷用户界面时:

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

从那时起, processOneThing() 会被重复调用。应始终以快速返回的这种方式编写 (通常在处理某一数据项后),以便 Qt 可以向用户界面交付事件,并在完成所有工作后尽快停止计时器。这是在 GUI 应用程序中实现繁重工作的传统方式,但随着多线程现今在越来越多平台中变为可用,期望零毫秒 QTimer 对象将被逐渐替换为 QThread

精度和计时器分辨率

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

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

For Qt::CoarseTimer and Qt::VeryCoarseTimer 类型, QTimer 的唤醒可能早于期望,在这些类型的边距内:间隔 5% 对于 Qt::CoarseTimer 和 500 ms 对于 Qt::VeryCoarseTimer .

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

替代 QTimer

替代使用 QTimer 是调用 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 = Q_NULLPTR)

构造计时器采用给定 parent .

QTimer:: ~QTimer ()

销毁计时器。

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 毫秒) 后自动终止。

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

注意: 此函数是 可重入 .

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

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

这是重载函数。

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

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

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

注意: 此函数是 可重入 .

另请参阅 start ().

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

这是重载函数。

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

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

The 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 对象。

The 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 对象。

The 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 对象。

The 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 ().

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

重实现自 QObject::timerEvent ().

int QTimer:: timerId () const

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