【QT】定时器使用

文章目录

  • 关于 Qt 定时器使用的注意细节总结
  • 实例-检查工具使用周期时间是否合理
    • UI设计
    • 头文件 remind.h
    • 源文件 remind.cpp
    • 实现效果

关于 Qt 定时器使用的注意细节总结

一、创建与初始化

  1. 使用 QTimer 类来创建定时器。可以在构造函数中指定父对象,确保定时器在正确的对象生命周期内被管理。
    • 例如:QTimer *timer = new QTimer(this);,这里的 this 表示定时器的父对象,通常是一个 QObject 派生类的实例,这样可以确保在父对象销毁时,定时器也能被正确清理。

二、设置时间间隔

  1. 通过 setInterval 方法设置定时器的时间间隔,单位为毫秒。
    • 例如:timer->setInterval(1000); 设置定时器每 1000 毫秒触发一次。

三、连接信号与槽

  1. 使用 connect 函数将定时器的 timeout 信号与相应的槽函数连接起来,以便在定时器超时时执行特定的操作。
    • 例如:connect(timer, &QTimer::timeout, this, &YourClass::yourSlotFunction);,当定时器超时时,会调用 YourClass 类中的 yourSlotFunction 槽函数。

四、启动定时器

  1. 使用 start 方法启动定时器,使其开始计时并按照设定的时间间隔触发信号。
    • 例如:timer->start();,启动定时器后,它会按照设定的时间间隔不断触发 timeout 信号。

五、静态变量与计数器的使用

  1. 在定时器的槽函数中,如果需要使用静态变量作为计数器,要注意其作用域和生命周期。确保在合适的时候进行初始化和更新,避免出现不可预期的结果。
    • 例如:在定时器超时处理槽函数中使用静态变量 cnt 作为计数器时,要清楚其在多次调用槽函数过程中的变化情况,避免出现计数错误或逻辑混乱。

六、注意资源管理

  1. 当不再需要定时器时,应及时停止并删除定时器对象,以避免资源泄漏。特别是在定时器的父对象生命周期结束时,要确保定时器也能被正确清理。
    • 例如:在对象的析构函数中,可以停止定时器并删除定时器指针,如 if (timer) { timer->stop(); delete timer; timer = nullptr; }

总之,在使用 Qt 定时器时,要注意正确地创建、初始化、连接信号与槽、启动和管理定时器资源,以确保定时器在应用程序中能够稳定、可靠地工作。

实例-检查工具使用周期时间是否合理

UI设计

在这里插入图片描述

头文件 remind.h

#ifndef REMIND_H
#define REMIND_H#include <QDialog>
#include <QTimer>
#include <QDateTime>
#include <QDate>// 引入生成的界面头文件
namespace Ui {
class remind;
}// remind 类的定义
class remind : public QDialog
{Q_OBJECT
public:// 显式构造函数,接受一个父指针参数,默认为 nullptrexplicit remind(QWidget *parent = nullptr);// 析构函数~remind();// 获取 remind 类的唯一实例的静态方法static remind *get_instance(void);// 检查工具时间是否有效的方法void is_tool_time_vaild(void);// 表示剩余天数的成员变量int days;
public slots:// 进入按钮点击处理槽函数void do_button_enter_handle(void);// 退出按钮点击处理槽函数void do_button_exit_handle(void);// 定时器超时处理槽函数void do_timer_out_handle(void);
private:// 指向生成的界面类的指针Ui::remind *ui;// 静态成员变量,用于存储唯一的 remind 实例指针static remind* instance;
};#endif // REMIND_H

源文件 remind.cpp

#include "Remind.h"
#include "ui_Remind.h"
#include <qDebug.h>// 静态成员变量初始化,初始值为 nullptr,表示当前没有创建 remind 实例
remind* remind::instance = nullptr;// remind 类的构造函数
remind::remind(QWidget *parent): QDialog(parent), ui(new Ui::remind)
{// 设置界面ui->setupUi(this);// 输出调试信息,表示 remind 对象构建了qDebug("remind 对象构建了");// 检查工具时间是否有效is_tool_time_vaild();// 连接进入按钮的点击信号与对应的槽函数connect(ui->pushButton_enter, &QPushButton::clicked, this, &remind::do_button_enter_handle);// 连接退出按钮的点击信号与对应的槽函数connect(ui->pushButton_exit, &QPushButton::clicked,this, &remind::do_button_exit_handle);
}// remind 类的析构函数
remind::~remind()
{// 删除界面指针delete ui;
}// 获取 remind 类的唯一实例的静态方法
remind* remind::get_instance(void)
{// 如果当前没有实例,则创建一个新的实例if (!instance) {instance = new remind();}// 返回实例指针return instance;
}// 定时器超时处理槽函数
void remind::do_timer_out_handle(void)
{
// 定义自动进入的时间间隔为 3 秒
#define AUTO_ENTRY_TIME (3)static int cnt = AUTO_ENTRY_TIME;// 如果剩余天数大于等于 0,表示工具未过期if (days >= 0) {// 在文本浏览器中显示剩余时间ui->textBrowser->append(QString::number(cnt) + "s 后自动进入");// 当计数器为 0 时,接受对话框,即自动进入if (0 == cnt)accept();}// 计数器递减cnt--;
}// 检查工具时间是否有效的方法
void remind::is_tool_time_vaild(void)
{// 输出调试信息,表示正在检查工具时间有效性qDebug("check tool time validity");// 创建一个定时器对象QTimer *timer = new QTimer(this);// 设置定时器的时间间隔为 1000 毫秒(1 秒)timer->setInterval(1000);// 连接定时器超时信号与 do_timer_out_handle 槽函数connect(timer, &QTimer::timeout, this, &remind::do_timer_out_handle);// 启动定时器timer->start();// 设置目标日期为 2024 年 9 月 14 日QDate targetDate(2024, 9, 14);// 获取当前日期时间QDateTime currentDateTime = QDateTime::currentDateTime();// 提取当前日期QDate currentDate = currentDateTime.date();// 计算当前日期与目标日期之间的天数差days = currentDate.daysTo(targetDate);// 拼接字符串并在文本浏览器中显示剩余有效期信息QString append = "剩余有效期 :";append += QString::number(days);append += "\n注意:本工具仅适用于 XXXXX 产品";ui->textBrowser->append(append);// 如果天数小于 0,表示工具已过期if (days < 0) {// 禁用退出按钮ui->pushButton_exit->setEnabled(false);// 在文本浏览器中显示过期提示信息ui->textBrowser->append("当前版本已过期,请联系开发人员");}
}// 进入按钮点击处理槽函数
void remind::do_button_enter_handle(void)
{// 输出调试信息,表示进入按钮被点击qDebug("button_enter");// 调用 accept() 函数表示接受对话框,通常会导致对话框关闭并返回一个特定的值(通常是 QDialog::Accepted),表示用户选择了“进入”操作。accept();
}// 退出按钮点击处理槽函数
void remind::do_button_exit_handle(void)
{// 输出调试信息,表示退出按钮被点击qDebug("button_exit");// 调用 reject() 函数表示拒绝对话框,通常会导致对话框关闭并返回一个特定的值(通常是 QDialog::Rejected),表示用户选择了“退出”操作。reject();
}

实现效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/141550.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

电子电气架构——中央计算的软件定义汽车架构

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c;多看一眼都是你的不…

台风,也称为热带气旋,是一种在热带海洋上形成的强烈风暴系统。台风的形成需要满足以下几个条件:

台风&#xff0c;也称为热带气旋&#xff0c;是一种在热带海洋上形成的强烈风暴系统。台风的形成需要满足以下几个条件&#xff1a; 1. **温暖的海水**&#xff1a;台风通常在海面温度至少达到26.5C&#xff08;79.7F&#xff09;的海域形成&#xff0c;因为温暖的海水能够提供…

XShell快速连接虚拟机(Ubuntu系统)

目录 前言 一 (XShell)(虚拟机 )(Ubuntu)下载 二 虚拟机的ip查找 三 虚拟机中安装连接环境 四 开启ssh-server服务 五 验证是Ubuntu是否开启ssh-server服务 六 连接XShell软件 前言 对于刚开始探索 Linux 世界的新手来说&#xff0c;拥有一台自己的服务器可能并不现实。幸运的…

学习大数据DAY58 增量抽取数据表

作业 1 SQL 优化的常见写法有哪些 - 面试经常被问 使用索引&#xff1a;合理创建和使用索引是提高查询效率的关键。索引可以加速数据的检 索速度&#xff0c;但是索引也会占用额外的存储空间&#xff0c;并且在插入、删除和更新操作时会 有额外的开销。 避免全表扫描&…

【ARM】中断术语介绍

外设产生中断给到gic&#xff0c;gic通过内部判断此中断是FIQ还是IRQ&#xff0c;这个过程就称为assert&#xff08;断言&#xff09; 此中断被发到哪里面去叫target cpu跳转到此中断的中断向量表中叫做taken 整个过程就做routing distribute决定将中断发给哪个cpu&#xff08…

【STM32】DAC数字模拟转换

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 前言 DAC简介 DAC配置 DAC时钟使能 GPIO初始化 DAC配置 DAC使能 读写DAC值 驱动代码 MyDAC.h MyDAC.c main.c 前言 大容量的STM32F101xx和STM32F103xx产品才有DAC外设 大容量…

基于SpringBoot的在线考试系统【附源码】

基于SpringBoot的在线考试系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1 系统概述 4.2系统功能结构设计 4.3.2 数据库表结构设计 5 系统实现 5.1管理员功能介绍 5.1.1管理员登录 5.1.2 试卷管理 5.1.3 公告信息管理 5.1.…

_Array类,类似于Vector,其实就是_string

例子&#xff1a; using namespace lf; using namespace std;int main() {_Array<int> a(10, -1);_Array<_string> s { _t("one"), _t("two") };_pcn(a);_pcn(s);} 结果&#xff1a; 源代码_Array.h&#xff1a; /***********************…

基础物理-直线运动2

2-1 位置、位移和平均速度 位置与位移 为了确定物体的位置&#xff0c;通常需要相对于某个参考点来测量&#xff0c;这个参考点通常是某个坐标轴的原点&#xff08;或零点&#xff09;&#xff0c;如图 2-1 中的 x 轴。坐标轴的正方向是坐标增大的方向&#xff0c;在图 2-1 中…

掌握远程管理的艺术:揭秘Python的pywinrm库

文章目录 &#x1f525; 掌握远程管理的艺术&#xff1a;揭秘Python的pywinrm库 &#x1f525;背景&#xff1a;为何选择pywinrm&#xff1f;pywinrm库简介安装pywinrm库简单库函数使用方法场景应用常见问题与解决方案总结 &#x1f525; 掌握远程管理的艺术&#xff1a;揭秘Py…

【ARM】Cache深度解读

Cache的基本概念和使用场景 不同的Master硬件共享数据时—invalid cache 外设和DDR之间没有cache&#xff0c;所以外设直接把数据写入DDR中&#xff0c;但是cpu和DDR之间有cache&#xff0c;cpu会首先访问cache&#xff0c;如果命中直接从cache中拿数据&#xff0c;但是此时的…

浪潮信息首推3秒智能控温!告别服务器开机噪音

在当前的数据中心运维实践中&#xff0c;运维人员在部署服务器时常被“飞机起飞”般的开机噪音所困扰。服务器刚刚接通电源&#xff0c;其内部元件尚处于预热待命状态&#xff0c;而风扇却已全速运转&#xff0c;这不仅加剧了噪音污染&#xff0c;还拖慢了启动速度&#xff0c;…

[数据集][目标检测]智慧交通铁路人员危险行为躺站坐检测数据集VOC+YOLO格式3766张4类别

图片数量(jpg文件个数)&#xff1a;3766 标注数量(xml文件个数)&#xff1a;3766 标注数量(txt文件个数)&#xff1a;3766 标注类别数&#xff1a;4 标注类别名称:["sitting","sleeping","standing","track"] 每个类别标注的框数&…

OpenCore Legacy Patcher 2.0.0 发布,83 款不受支持的 Mac 机型将能运行最新的 macOS Sequoia

在不受支持的 Mac 上安装 macOS Sequoia (OpenCore Legacy Patcher v2.0.0) Install macOS on unsupported Macs 请访问原文链接&#xff1a;https://sysin.org/blog/install-macos-on-unsupported-mac/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主…

《深度学习》PyTorch 手写数字识别 案例解析及实现 <下>

目录 一、回顾神经网络框架 1、单层神经网络 2、多层神经网络 二、手写数字识别 1、续接上节课代码&#xff0c;如下所示 2、建立神经网络模型 输出结果&#xff1a; 3、设置训练集 4、设置测试集 5、创建损失函数、优化器 参数解析&#xff1a; 1&#xff09;para…

一篇文章带你入门机器学习 Part1 -->Machine Learning from Scratch

学习网站&#xff1a;Machine Learning from Scratch Machine Learning from Scratch (Part1神经网络&#xff09; 神经网络——Neural Networks神经网络是如何工作的&#xff1f;训练神经网络 神经网络——Neural Networks 在人工神经网络的背景下&#xff1a;一个神经元是一…

全面理解tensor编程中矩阵的行和列

经常会在编程中遇到理解矩阵行和列的事情。 1、要明确无论这个张量有多少维度&#xff0c;它的矩阵乘法都只能作用于最后两个维度。 例如&#xff1a; import torcha torch.rand([64, 32, 3, 4]) b torch.rand([64, 32, 3, 4])c torch.matmul(a, b.transpose(2, 3)) # 交…

备战软考Day02-数据结构与算法

1.基本概念与三要素 1.什么是数据 数据是信息的载体&#xff0c;是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。 2.数据元素、数据项 数据元素是数据的基本单位&#xff0c;通常作为一个整体进行…

18062 二维数组每行中的最大值

### 思路 1. 使用指针变量遍历二维数组的每一行。 2. 对于每一行&#xff0c;找到该行的最大值。 3. 输出每一行的最大值。 ### 伪代码 1. 定义一个指向二维数组的指针变量 p。 2. 遍历二维数组的每一行&#xff1a; - 将 p 指向当前行。 - 初始化 max 为当前行的第一个…

探索Python轻量级数据库:TinyDB的奇妙之旅

文章目录 探索Python轻量级数据库&#xff1a;TinyDB的奇妙之旅背景&#xff1a;为何选择TinyDB&#xff1f;什么是TinyDB&#xff1f;如何安装TinyDB&#xff1f;简单库函数使用方法场景应用常见Bug及解决方案总结 探索Python轻量级数据库&#xff1a;TinyDB的奇妙之旅 背景&…