# 概述 > 本篇介绍了 QTimer 类的基本用法,并应用该类制作了一个简单的倒计时程序。 > 环境:Win10 + QT Creator4.4.1 + QT5.9.2。 > 实现内容:通过按钮触发一个简单的倒计时并在屏幕上显示,时间耗尽后弹出提示框。 ![Title](/upload/LearningNotes-QT-03-1.jpg) ---------- # 一、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 ``` 完成头文件包含后,就可以通过 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](/upload/LearningNotes-QT-03-2.jpg) **定义一下 timer 与剩余时间:** ![Title](/upload/LearningNotes-QT-03-3.jpg) **完成 pushButton 的 clicked 槽实现,点击按钮启动时钟:** ![Title](/upload/LearningNotes-QT-03-4.jpg) **别忘了定义槽啊大兄弟:** ![Title](/upload/LearningNotes-QT-03-5.jpg) **最后在.cpp中把槽实现就O98K了:** ![Title](/upload/LearningNotes-QT-03-6.jpg) **运行起来的效果是这样的:** ![Title](/upload/LearningNotes-QT-03-7.gif)