当前位置: 首页 > news >正文

【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();
}

实现效果

在这里插入图片描述

相关文章:

【QT】定时器使用

文章目录 关于 Qt 定时器使用的注意细节总结实例-检查工具使用周期时间是否合理UI设计头文件 remind.h源文件 remind.cpp实现效果 关于 Qt 定时器使用的注意细节总结 一、创建与初始化 使用 QTimer 类来创建定时器。可以在构造函数中指定父对象&#xff0c;确保定时器在正确的…...

虚拟机:3、(待更)WSL2安装Ubuntu系统+实现GPU直通

WSL2实现linux子系统GPU直通 安装WSL2和Ubuntu 见https://blog.csdn.net/bule_shake/article/details/135992375 问题&#xff1a;wsl --update进度卡住 如果命令wsl --update进度一直为0&#xff0c;可以先运行wsl --shutdown&#xff0c;然后再次升级。 微软商店打不开、…...

CSP-J2024年全真模拟题 阅读程序篇2

因为明天考试&#xff0c;这回给大家准备了超详细的解析~ 22.程序中 n 和 m 只有输入正整数&#xff0c;程序的输出值才可能是 YES A.对B.错 23.程序中用到了递归函数 bool fun&#xff08;int n&#xff09; A.对B.错 24.若输入 n 和 m 都是素数&#xff0c;程序的输出值…...

几种手段mfc140u.dll丢失的解决方法,了解mfc140u.dll

在使用Windows操作系统时&#xff0c;许多用户可能会遇到“找不到mfc140u.dll”或“mfc140u.dll未找到”的错误提示。这个错误通常是由于该文件丢失或损坏所致。本文将详细介绍mfc140u.dll文件的作用、丢失的原因及其解决方法&#xff0c;帮助您快速恢复系统的正常运行。 一、m…...

Scrapy爬虫框架 Spider Middleware 爬虫页中间件

在当今的互联网时代,数据的收集和分析变得越来越重要,爬虫技术作为数据获取的重要手段,受到广泛关注。Scrapy 是一个广受欢迎的 Python 爬虫框架,它以其高效、灵活和易于扩展的特点,成为了开发者的首选工具之一。Scrapy 框架中的中间件(Spider Middlewares)是扩展和定制…...

localectl 命令:系统语言、键盘布局和区域设置

一、命令简介 ​localectl​ 是 Linux 系统中用于查询和配置系统语言、键盘布局和区域设置的命令。它属于 systemd​ 系统和服务管理器的一部分&#xff0c;允许用户通过简单的命令行接口更改与本地化相关的配置。 ‍ 相关命令&#xff1a; 如果是时间相关的设置&#xff0…...

《微信小程序实战(3) · 推广海报制作》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…...

SS-MUSIC

SS-MUSIC 相干信号源带来的缺秩问题什么是中心对称阵列什么是前后向平均技术什么是 SS-MUSIC 算法SS-MUSIC 能解相干的原因SS-MUSIC 改进算法总结参考文献 本文讨论针对一维均匀线阵&#xff08;ULA&#xff0c;Uniform Linear Array&#xff09;的空间平滑 MUSIC&#xff08;S…...

Spring Cloud Gateway组件

Spring Cloud Gateway是Spring Cloud生态系统中的一个关键组件&#xff0c;它基于Spring Framework 5、Spring Boot 2和Project Reactor等技 术构建&#xff0c;为微服务架构提供了强大且灵活的网关服务。以下是对Spring Cloud Gateway的详细介绍&#xff1a;一、概述 Spring …...

激发AI创造力:掌握Prompt提示词的高效提问方法

AI内容创作的核心&#xff1a;提示词Prompt 在AI内容创作中&#xff0c;提示词&#xff08;Prompt&#xff09;是关键因素&#xff0c;能有效引导AI生成高质量、符合预期的内容。通过合理组织提示词&#xff0c;创作者可以大幅提升AI输出的准确性和专业度。掌握提示词的编写技…...

江科大笔记—STM32课程简介

课程简介...

使用 nvm 管理 node 版本:如何在 macOS 和 Windows 上安装使用nvm

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、nvm的安装与基本使用2.1 macOS安装nvm2.1.1 使用 curl 安装2.1.2 使用 Homebrew 安装 2.2 Windows安装nvm2.2.1 下载 nvm-windows2.2.2 安装 nvm-windows 2.3 安装node2.4 切换node版本 三、常见问题及解决方案…...

【项目开发 | Python】基于“羊了个羊“风格的消除类小游戏

原创文章,不得转载。 目标:使用 Python 开发"羊了个羊"风格的消除类小游戏,合理运用 AIGC 工具提高开发效率;使用文生图工具实现图片设计等工作。 文章目录 项目背景项目介绍+项目展示游戏逻辑概述主界面游戏界面获胜界面失败界面附加功能项目细节项目测试测试样…...

云服务器使用

最近搭建一个内网穿透工具&#xff0c;推荐一个云服务器&#xff1a; 三丰台&#xff1a;https://www.sanfengyun.com/ 作为学生党这个服务器是免费的可以体验使用&#xff01;可以使用免费虚拟主机和云服务器&#xff0c;写一个申请的基本步骤方便大家构建 申请步骤&#x…...

sqli-lab靶场学习(四)——Less11-14(post方法)

前言 第1-10关都是get方法&#xff0c;本关开始进入post方法。其实post也好get也好&#xff0c;本质都差不多&#xff0c;使用的技巧也基本相同。 Less11 第11关打开是一个输入用户名密码的界面 显然登陆对话框会使用post方式提交&#xff0c;这里我们尝试在Username一栏通过…...

GBDT算法原理及其公式推导过程

GBDT&#xff08;Gradient Boosting Decision Tree&#xff0c;梯度提升决策树&#xff09;是一种集成学习方法&#xff0c;主要用于回归和分类任务。它的基本思想是通过迭代地构建一系列弱学习器&#xff08;通常是决策树&#xff09;&#xff0c;并将这些弱学习器组合成一个强…...

网络:UDP协议

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》 文章目录 前言UDP协议报头和有效载荷分离的问题有效载荷向上交付的问题&#xff0c;也就是交给哪个进程&#xff1f;怎么确定把报文收全了&#xff1f;UDP报头是如何封装的呢&…...

linux与unix

不同点 1开源性 linux是开源的&#xff0c;unix是闭源的 2跨平台性 linux具有很好的跨平台性&#xff0c;可以运行在多种硬件平台 unix大多需要与指定硬件配套使用 3相关操作 linux既可以进行命令行操作&#xff0c;也可以进行图形化的操作 unix只是命令行下的操作 4对…...

计算机网络29——Linux基本命令vim,gcc编译命令

1、创建新用户 2、给用户设置密码 3、切换到新用户 切换到root用户 4、删除用户 5、查看ip 6、ping 查看物理上两台主机是否联通 7、netstatus 8、nslookup 查看网址的地址 9、负载均衡与容灾备份 负载均衡&#xff1a;指将负载&#xff08;工作任务&#xff09;进行平衡、分…...

uniapp离线(本地)打包

安卓离线打包 注意&#xff1a;jdk建议选择1.8 下载Android Studio配置gradle仓库地址 第一步&#xff1a;先下载对应的版本&#xff0c;进行压缩包解压 第二步&#xff1a;在电脑磁盘&#xff08;D盘&#xff09;&#xff0c;创建文件夹存放压缩包并进行解压&#xff0c;并创…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...