概述

本篇介绍了 QTimer 类的基本用法,并应用该类制作了一个简单的倒计时程序。 环境:Win10 + QT Creator4.4.1 + QT5.9.2。 实现内容:通过按钮触发一个简单的倒计时并在屏幕上显示,时间耗尽后弹出提示框。

Title


一、QTimer 类浅述

QTimer 类是 QT 为我们提供的一个时钟类,可以通过创建 QTimer 的实例,并将周期信号连接到适当的槽,来方便地实现周期性的函数调用。以下是官方手册中给出的描述:

The QTimer class provides repetitive and single-shot timers. The QTimer class provides a high-level programming interface for timers. To use it, create a QTimer, connect its timeout() signal to the appropriate slots, and call start(). From then on, it will emit the timeout() signal at constant intervals.

如何使用

为了使用 QTimer 类,必须包含相应的头文件:

#include <QTimer>

完成头文件包含后,就可以通过 new 关键字来得到一个 QTimer 类的实例指针:

其中 QTimer 类的非空构造函数的参数指明了时钟绑定的对象,一般写 this,便于和主窗口的槽建立连接。

QTimer timer = new QTimer(this); // 创建时钟

时钟生成后,就可以通过成员函数:QTimer::start(int msec)、QTimer::stop()来控制时钟的开始与停止了:

timer.start(100); // 以 100ms 为时钟周期启动时钟
timer.stop(); // 停止时钟

当然,start 函数的参数列表是可空的,因此也可通过成员函数 QTimer::setInterval(int msec) 来只设定时钟的周期,在合适的时机通过 QTimer::start(null) 单独启动时钟,例如:

QTimer timer = new QTimer(this); // 创建时钟
timer.setInterval(200); // 设置时钟周期
...
timer.start(); // 启动时钟

信号的接受

时钟开始运转后,每当到达了设定的时间,就会自动触发 QTimer::timeout() 信号,通过 connect 函数将信号与槽函数相关联,就可以定时收到“时钟消息”了:

QTimer timer = new QTimer(this); // 创建时钟
timer.setInterval(200);	// 设置时钟周期为 200 ms
connect(timer, SIGNAL(timeout()), this, SLOT(update())); // 将到时信号与主窗口的update槽关联
...
timer.start(); // 启动时钟

二、小例子:简单倒计时

目标效果:在文本框内输入时间(秒),按下倒计时按钮,程序开始倒计时,并在屏幕上显示剩余的秒数,当时间耗尽时弹出信息框给出相应提示。

首先创建一个 Qt GUI 项目,并简单搭建一下界面:

Title

定义一下 timer 与剩余时间:

Title

完成 pushButton 的 clicked 槽实现,点击按钮启动时钟:

Title

别忘了定义槽啊大兄弟:

Title

最后在.cpp中把槽实现就O98K了:

Title

运行起来的效果是这样的:

Title