# flechazo 的小知乎,欢迎大家造访啦😘
flechazo
https://www.zhihu.com/people/jiu_sheng
# QT 中使用定时器
# 初见
为啥子要用定时器呢?因为喜欢哈哈哈!
定时器在软件开发中有着广泛的应用,其主要作用包括但不限于以下几个方面:
- 执行周期性任务:定时器可以设置一个时间间隔,定时触发任务的执行。这种周期性的执行可以用于定期更新界面、定时采集数据、定时发送心跳包等场景。
- 延迟执行任务:定时器也可以用于延迟执行任务,即在一定的时间后触发任务的执行。这种延迟执行可以用于实现一些需要等待一段时间后才能执行的操作,比如启动动画、显示提示信息等。
- 实现超时处理:在网络通信、用户交互等场景中,经常需要设置超时时间来处理未在规定时间内完成的操作,定时器可以用于监测超时并执行相应的处理逻辑。
- 定时刷新数据:对于需要定时更新数据的应用,比如实时监控系统、股票行情等,定时器可以周期性地触发数据刷新操作,保持数据的实时性。
- 节省资源:定时器可以在需要执行任务时启动,任务执行完毕后自动停止,有效地节省了系统资源和能耗。
总的来说,定时器是一种非常有用的工具,可以帮助我们实现各种时间相关的功能,提高程序的灵活性和用户体验。在软件开发中合理使用定时器能够提高系统的效率和性能。
# 了解
先来看一哈思路
// 创建一个指向 QTimer 对象的指针 flechazoTimer_s | |
QTimer *flechazoTimer_s; | |
// 在堆上分配一个新的 QTimer 对象,并将其地址赋给 flechazoTimer_s 指针 | |
flechazoTimer_s = new QTimer; | |
// 启动定时器,设置定时器的间隔为 1000 毫秒(1 秒) | |
flechazoTimer_s->start(1000); | |
// 连接定时器的 timeout 信号到 MainWindow 类的 vflechazo_s 槽函数 | |
// 这意味着当定时器超时时,将调用 MainWindow 类的 vflechazo_s 函数 | |
connect(flechazoTimer_s, &QTimer::timeout, this, &MainWindow::vflechazoTimerout_s); | |
// MainWindow 类的 vflechazo_s 槽函数的声明和实现 | |
void MainWindow::vflechazoTimerout_s(void) | |
{ | |
// 在这里执行定时任务 | |
} |
# 熟悉
经过上述的思路,我们就可以开始玩耍了。
定时器用起来真的很方便。
我最开始用的时候呢是因为超时中断。做单片机的都知道,UART 里的中断是可以设定超时中断的。但在第一次接触 QT 时竟然没找到这个设定。使用起来很是不舒服。
下次出一篇文章仔细介绍
# 源码
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QTime>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
QTimer *flechazoTimer_s;
void vflechazoTimerout_s(void);
private slots:
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
flechazoTimer_s = new QTimer;
flechazoTimer_s->start(1000);
connect(flechazoTimer_s, &QTimer::timeout,this,&MainWindow::vflechazoTimerout_s);
}
//定时器中断->1s进入1次
void MainWindow::vflechazoTimerout_s(void)
{
// 在这里执行定时任务
}
好啦!有了定时器想干嘛就干嘛了!熟悉的单片机的味道回来啦哈哈哈