文章目录
- 定时器
- QTimerEvent
- QTimer
- 获取系统日期及时间
定时器
Qt 中在进行窗口程序的处理过程中,经常要周期性的执行某些动作,或者制作一些动画效果,使用定时器可以实现这些需求。
定时器,会在间隔一定时间后,执行某一个任务。常见使用如倒计时,弹窗自动关闭之类等
Qt 中的定时器有 QTimeEvent
和 QTimer
这两个类
QTimerEvent类
用来描述一个定时器事件。在使用时通过 startTimer() 函数开启一个定时器,这个函数需要输入一个以毫秒为单位的整数作为参数来表明设定的时间,它返回的整型值代表这个定时器
,类似文件描述符和进程IDQTimer类
实现一个定时器,它提供了更高层次的编程接口,如:使用信号槽,还可以设置只运行一次的定时器
QTimerEvent
上面说过,QTimeEvent 通过 startTimer() 函数创建的定时器触发
,一次 startTimer() 就会创建一个定时器,函数返回值为整数,可以理解为定时器编号,类似计算机操作系统中的文件 struct file 或 进程task struct,由系统维护。
startTimer()函数原型如下:
int interval:定时器触发事件的周期,单位为毫秒
Qt::TimerType timerType:定时器类型,主要是精准度不同
- Qt::PreciseTimer:将准确度保持毫秒级的精度
- Qt::CoarseTimer:将准确度保持在所需间隔的5%以内
- Qt::VeryCoarseTimer:将准确度保持完整的秒精度
代码示例:创建两个Label,显示数字。第一个Label的数字每1秒累加一次,第二个Label的数字每两秒累加一次
- 在 UI 界面文件放置两个 Label 控件
- 编写
widget.h
,声明timerEvent()
,定义两个整型变量接收定时器编号
- 编写
widget.cpp
,实现timerEvent()
void Widget::timerEvent(QTimerEvent *event)
{
//startTimer创建的定时器周期到达都会触发该事件
if(timerid_1 == event->timerId())
{
//第一个定时器,每一秒触发一次,累加数字
static int num = 1;
qDebug() << "定时器1触发,时间:" << num;
ui->label->setText(QString::number(num++));
}
else if(timerid_2 == event->timerId())
{
//第二个定时器,每两秒触发一次,累加数字
static int num = 1;
qDebug() << "定时器2触发,时间:" << num;
ui->label_2->setText(QString::number(num++));
}
}
- 运行结果如下:
QTimer
QTimer 则使用信号槽机制,完成定时器
代码示例:实现简易的计时器
在 UI 界面放置一个 Label 标签,两个按钮,分别是"开始" 和 “停止”,当点击开始时每隔1秒累加一次,点击“停止”暂停计数
- 设计 UI 界面如下:
- 编写
widget.cpp
,编写相关信号槽函数
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QTimer *timer = new QTimer(this);
//连接“开始”按钮信号槽
connect(ui->pushButton, &QPushButton::clicked, this, [=](){
timer->start(1000);
});
//连接定时器信号槽
connect(timer, &QTimer::timeout, this, [=](){
static int num = 1;
ui->label->setText(QString::number(num++));
});
//连接“停止”按钮信号槽
connect(ui->pushButton_2, &QPushButton::clicked, this, [=](){
timer->stop();
});
}
- 运行结果如下:
获取系统日期及时间
在 Qt 中,获取系统的日期及实时时间可以通过 QTimer类 或 QDateTime类
QDateTime类 提供了字符串格式的时间。字符串形式的时间输出格式由 toString() 方法中的 format 参数列表决定
时间日期格式,形如yyyy/M/d H:mm 2024/07/31 09:35
可用的参数列表如下:
- y表示年份
- M表示月份
- d表示日期
- H表示小时
- m表示分钟
- s表示秒
代码示例:获取系统日期及实时时间
- 设计 UI 界面文件。放置一个Label控件, 用来显示日期和时间,放置两个按钮:“开始” 和 “停止”
- 编写
widget.cpp
,连接相应信号槽
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//创建定时器
QTimer* timer = new QTimer(this);
//连接“开始”按钮信号槽
connect(ui->pushButton, &QPushButton::clicked, this, [=](){
timer->start(1000);
});
//连接定时器信号槽
connect(timer, &QTimer::timeout, this, [=](){
QString time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
ui->label->setText(time);
});
//连接“停止”按钮信号槽
connect(ui->pushButton_2, &QPushButton::clicked, this, [=](){
timer->stop();
});
}
- 运行结果如下:
结束语
感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。