【Qt】Qt系统 | Qt事件 | 定时器

文章目录

  • 定时器
  • QTimerEvent
  • QTimer
  • 获取系统日期及时间

定时器

Qt 中在进行窗口程序的处理过程中,经常要周期性的执行某些动作,或者制作一些动画效果,使用定时器可以实现这些需求。
定时器,会在间隔一定时间后,执行某一个任务。常见使用如倒计时,弹窗自动关闭之类等


Qt 中的定时器有 QTimeEventQTimer 这两个类

  • QTimerEvent类 用来描述一个定时器事件。在使用时通过 startTimer() 函数开启一个定时器,这个函数需要输入一个以毫秒为单位的整数作为参数来表明设定的时间它返回的整型值代表这个定时器,类似文件描述符和进程ID
  • QTimer类 实现一个定时器,它提供了更高层次的编程接口,如:使用信号槽,还可以设置只运行一次的定时器

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的数字每两秒累加一次

  1. 在 UI 界面文件放置两个 Label 控件
    在这里插入图片描述
  2. 编写 widget.h,声明 timerEvent(),定义两个整型变量接收定时器编号
    在这里插入图片描述
  3. 编写 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++));}
}
  1. 运行结果如下:
    在这里插入图片描述

QTimer

QTimer 则使用信号槽机制,完成定时器

代码示例:实现简易的计时器
在 UI 界面放置一个 Label 标签,两个按钮,分别是"开始" 和 “停止”,当点击开始时每隔1秒累加一次,点击“停止”暂停计数

  1. 设计 UI 界面如下:在这里插入图片描述
  2. 编写 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();});
}
  1. 运行结果如下:
    在这里插入图片描述

获取系统日期及时间

在 Qt 中,获取系统的日期及实时时间可以通过 QTimer类 或 QDateTime类
QDateTime类 提供了字符串格式的时间。字符串形式的时间输出格式由 toString() 方法中的 format 参数列表决定

时间日期格式,形如yyyy/M/d H:mm 2024/07/31 09:35

可用的参数列表如下:

  • y表示年份
  • M表示月份
  • d表示日期
  • H表示小时
  • m表示分钟
  • s表示秒

代码示例:获取系统日期及实时时间

  1. 设计 UI 界面文件。放置一个Label控件, 用来显示日期和时间,放置两个按钮:“开始” 和 “停止”
    在这里插入图片描述
  2. 编写 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();});
}
  1. 运行结果如下:
    在这里插入图片描述

结束语
感谢你的阅读
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git下载安装配置

Git的下载与安装 Git是一种分布式版本控制系统&#xff0c;用于跟踪文件和文件夹的变化。它最初由Linus Torvalds开发&#xff0c;用于管理Linux内核的源代码。Git的设计目标是&#xff1a;速度快、开发效率高、数据完整性和可靠性强。 Git通过创建一个存储库&#xff08;rep…

【FESCO福利专区-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

什么领域/方向的产品经理既有发展前景又能做的长久

前几天我在知乎上回答了一道“目前什么领域的产品经理比较有发展前景&#xff1f;有推荐的课程吗&#xff1f;”的问题&#xff0c;讲得还比较实在&#xff0c;于是在这里也顺便分享一下。 TOP1.商业产品经理 之所以这个方向能排在第1&#xff0c;我认为有3点理由。 第1点&a…

国产游戏技术能否引领全球?

国产游戏技术&#xff1a;引领全球还是任重道远&#xff1f; 近年来&#xff0c;伴随着中国科技和经济的迅猛发展&#xff0c;国产游戏行业也呈现出蓬勃发展的态势。从《原神》到《黎明杀机手机版》&#xff0c;多款国产游戏在国际市场上崭露头角。而国产游戏在画面渲染、物理…

基于layui实现简单的万智牌生命计数器页面

对照手机App“旅法师营地”的万智牌生命计数器窗口&#xff08;如下图所示&#xff09;&#xff0c;使用layui、jQuery等实现简单的万智牌生命计数器页面。   主要实现的功能如下&#xff1a;   1&#xff09;点击左右两侧的-1、1、-5、5区域更新左右两侧生命值&#xff1…

短视频SDK解决方案,代码逻辑结构清晰,接入便捷

美摄科技凭借其在多媒体处理领域的深厚积累&#xff0c;推出了高效、易用的短视频SDK解决方案&#xff0c;为开发者及内容创作者提供了一站式的短视频创作与编辑工具&#xff0c;让每一份灵感都能轻松转化为引人入胜的视觉盛宴。 一、技术领先&#xff0c;打造极致体验 美摄科…

DNS详解

DNS详解 DNS 是一个域名系统&#xff0c;它主要用于将人类容易记忆的域名转换成ip地址。 默认情况下&#xff0c;设备会自动从网络供应商获取DNS服务器地址&#xff0c;并使用DNS服务器对域名进行解析。 此外&#xff0c;你也可以手动设置DNS服务器&#xff0c;具体操作系统…

反射机制简单基础

前序 在我们没有学习框架之前我们都是通给new来创建对象&#xff0c;如&#xff1a;创建一个我们已知的对象 Car carnew Car(); 调用类中的成员变量和成员方法都是对象直接调用。 在学习了mybatis框架后&#xff0c;我们了解到可以通过类名&#xff0c;能动态得到类中定义的…

基于x86 平台opencv的图像采集和seetaface6的静默活体功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.3 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的静默活体功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的静默活体模块从而实现…

量化四大邪术之一:般若波罗蜜

网络相传亚洲有四大邪术&#xff0c;日本化妆&#xff0c;韩国整容&#xff0c;泰国变X&#xff0c;Z国PS。 这些都是让人在颜值上看起来很美&#xff0c;类似地&#xff0c;在量化交易领域&#xff0c;也有四大邪术能让净值曲线看起来很美&#xff0c;今儿个来说量化四大邪术当…

一文弄懂MySQL中的锁

MySQL中的锁概述 MySQL中的锁机制是数据库管理系统用于控制并发操作的一种手段&#xff0c;主要用于保证数据的一致性和完整性。当多个事务同时操作同一数据时&#xff0c;锁机制可以防止数据冲突和确保事务的隔离性。 在MySQL中&#xff0c;锁可以分为三大类&#xff1a;全局…

前端自动导入依赖

前言 开发中通常会有很多导入语句&#xff0c;如何确保一些通用的api和hook无需每次手动导入即可使用。 <script setup lang"ts"> import { ref, reactive } from "vue" import { useRoute, useRouter } from "vue-router" import { log…

在多云生态下,如何实现跨云的自动化身份管理?

在多云环境下实现跨云的自动化身份管理是一个重要的课题&#xff0c;因为这可以帮助企业确保用户和应用程序能够在不同云服务提供商之间无缝地访问资源&#xff0c;同时保持高度的安全性和合规性。以下是一些关键技术和实践方法&#xff0c;用于实现跨云环境下的自动化身份管理…

Go学习笔记(一)语法

标准库文档&#xff1a;Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国 B站课程&#xff1a;8小时转职Golang工程师(如果你想低成本学习Go语言) 课程作者语雀&#xff08;首页有更多内容&#xff09;&#xff1a;8小时转职Golang工程师 语雀 代码仓…

关于武汉芯景科技有限公司的多协议收发芯片XJ526(第二篇RS422模式)开发指南(兼容SP526)

一、设置芯片为RS422模式 SP526 包含高度集成的串行收发器。SP526 提供 RS-232 &#xff08;V.28&#xff09;、RS-423 &#xff08;V.10&#xff09;、RS-422 &#xff08;V.11&#xff09; 和 RS-485 的硬件接口模式。接口模式选择通过两个控制引脚D0、D1完成。 我们将D0接…

『功能项目』摄像机跟随角色【07】

我们打开上一篇06新输入系统项目&#xff0c; 本章要做的事情是摄像机跟随主角移动&#xff0c; 给主角增加一个Player标签方便主摄像机查找主角对象 在编辑场景调好角度&#xff0c;选择Main Camera对象按键盘Ctrl Shift F使运行场景与编辑场景相同 新建CameraCtrl脚本代码 …

玄机又成国漫首创!IP与AI融合,凭实力火出圈

现在国漫越来越卷了&#xff0c;不仅卷制作质量&#xff0c;还卷各种花式联动。最近玄机科技和百度文库联合举办的AI漫画大赛圆满结束&#xff0c;这还是国内的IP第一次和AI技术融合&#xff0c;而且产出了不少好作品。下面就一起来看看吧&#xff01; 提到玄机科技&#xff0c…

若依权限控制前端+后端实现思路梳理(PreAuthorize、hasPermi、v-hasPermi)

一、权限控制引发的思考 引言 最近接手了公司的一个项目&#xff0c;实施反馈说&#xff0c;客户那边要求对不同的权限的用户操作权限做限制。场景就是&#xff0c;比如一个项目列表&#xff0c;这部分数据有可能是针对某个公司某个部门的&#xff0c;对应不同的部门用户能看…

【Kotlin设计模式】Kotlin实现装饰器模式

前言 装饰器模式&#xff08;Decorator Pattern&#xff09;&#xff0c;用于动态地为对象添加新功能&#xff0c;而无需修改其结构&#xff0c;通过使用不用装饰类及这些装饰类的排列组合&#xff0c;可以实现不同的功能和效果&#xff0c;但是这样的效果就是会增加很多类&…

Cypress第二次安装遇到的问题

问题一&#xff1a;吐血&#xff0c;谁会想到node.js的官网访问不了呢&#xff01; 中文网站&#xff1a;http://url.nodejs.cn/download/ 官网&#xff1a;https://nodejs.org/zh-cn nodejs安装的两种方法(官网、NVM安装-node版本切换)不知道这种方式是否可行&#xff0c;还…