QT(三):浅探 QTimer 类
概述
本篇介绍了 QTimer 类的基本用法,并应用该类制作了一个简单的倒计时程序。 环境:Win10 + QT Creator4.4.1 + QT5.9.2。 实现内容:通过按钮触发一个简单的倒计时并在屏幕上显示,时间耗尽后弹出提示框。
一、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 项目,并简单搭建一下界面:
定义一下 timer 与剩余时间:
完成 pushButton 的 clicked 槽实现,点击按钮启动时钟:
别忘了定义槽啊大兄弟:
最后在.cpp中把槽实现就O98K了:
运行起来的效果是这样的:
- 感谢你赐予我前进的力量