Qt时间日期处理与定时器使用总结

一、日期时间数据

1.QTime

        用于存储和操作时间数据的类,其中包括小时(h)、分钟(m)、秒(s)、毫秒(ms)。函数定义如下:

//注:秒(s)和毫秒(ms)有默认值0
QTime::QTime(int h, int m, int s = 0, int ms = 0)

        若无须初始化时间数据,可以使用静态函数 QTime::currentTime() 来创建一个QTime对象,并获取当前时间:

QTime time = QTime::currentTime();

        在通常情况下,我们直接获取当前时间即可,如需修改当前时间可直接使用setHMS方法。因此后文将不再介绍使用函数定义的方法操作时间数据。

        在默认情况下,QTime总是使用24小时制,不区分AM/PM。那么我们想要用到12小时制时该怎么处理时间数据呢?这里需要用到一个函数 toString() 来格式化时间(后文有介绍)。

QTime常用函数接口
int hour()返回当前小时数据
int minute()返回当前分钟数据
int second()返回当前秒数据
int msec()返回当前毫秒数据
bool setHMS(int h, int m, int s, int ms = 0)设置时间
int msecsSinceStartOfDay()返回从00:00:00开始的毫秒数
QTime addSecs(int s)

返回当前±s秒后的时间

int secsTo(QTime t)返回当前时间与t相差的秒数

2.QDate

        用于存储和操作日期数据的类,其中包含年、月、日数据。同样也可使用 QDate::currentDate() 来获取当前日期。

        当然说到日期,其中一个避不开的话题就是判断闰年。这里Qt直接给了一个静态函数方便判断哪一年是否为闰年:

bool QDate::isLeapYear(int year)
QDate常用函数接口

int year()   

返回当前日期的年数据
int month()返回当前日期的月数据
int day()返回当前日期的日数据
int dayOfWeek()返回星期几
bool setDate(int year, int month, int day)设置日期
bool getDate(int *year, int *month, int *day)获取日期
QDate addDays(int ndays)返回当前日期再加几天的日期
qint64 daysTo(QDate d)返回与日期d的间隔天数

3.QDateTime

        表示日期数据和时间数据的类。可通过如下方式获取日期和时间:

QDateTime dateTime = QDateTime::currentDateTime();
QDate dateTime = DT1.date();   //获取日期
QTime dateTime = DT1.time();   //获取时间
QDateTime常用函数接口
qint64 toSecsSinceEpoch()返回与1970年1月1日相差的秒数
void setSecsSinceEpoch(qint64 secs)设置与1970年1月1日相差的秒数为当前的日期数据
QdateTime toUTC()将当前时间转换为UTC数据

注:UTC(协调世界时,Coordinated Universal Time)是世界上时间的标准,它不受时区影响,并且基于原子钟的精确计时。UTC时间是一种时间标准,用于全球的时钟和时间信号。

4.格式化日期时间数据

        QTime、QDate、QDateTime都有格式化数据方法 toString() 和 fromString()。

a.toString()

        将当前的日期时间数据转换为字符串。函数原型定义如下:

QString QDateTime::toString(const QString &format)

        format为转化后的格式,Qt提供了一些预定义的格式可以直接使用。常用的为:Qt::TextDate、Qt::ISODate、Qt::SystemLocaleShortDate(Qt6已被移除)等。当然也可以使用一些自定义格式,例如:

  • yyyy:四位数的年份
  • MM:两位数的月份(01-12)
  • dd:两位数的日期(01-31)
  • hh:两位数的小时(00-23)
  • mm:两位数的分钟(00-59)
  • ss:两位数的秒(00-59)
  • zzz:三位数的毫秒(000-999)
  • AP或A:使用AM/PM表示,即从24小时制转化为12小时制

        注:在上面的格式中,如果只写一位,如‘d’,则表示不补零显示(1-31)而非(01-31)。 举例:

QDateTime dateTime = QDateTime::currentDateTime();
qDebug() << "TextDate format:" << dateTime.toString(Qt::TextDate);
qDebug() << "ISODate format:" << dateTime.toString(Qt::ISODate);
qDebug() << "Custom format:" << dateTime.toString("yyyy-MM-dd hh:mm:ss.zzz AP");

        其输出结果为:

b.fromString()

        将字符串转化为相应类的对象。其函数原型如下:

QDateTime QDateTime::fromString(const QString &string, const QString &format)

        举个例子:

QString dateTimeString = "2024-07-02 14:30:45.123";
QDateTime dateTime1 = QDateTime::fromString(dateTimeString, Qt::ISODate);
QDateTime dateTime2 = QDateTime::fromString(dateTimeString, "yyyy-MM-dd hh:mm:ss.zzz");
qDebug() << "DateTime1:" << dateTime1.toString();
qDebug() << "DateTime2:" << dateTime2.toString();

        输出结果为:

5.界面组件

        具体在创建界面时,可拖动如图所示组件实现:

 二、定时器

1.QTimer

        QTimer的父类为QObject,支持Qt的元对象系统。因此虽然它不是一个界面组件类,但是它也有属性、信号(timeout())和槽(start()、stop()、自定义等)。其主要属性如下:

属性类型功能
intervalint定时周期,单位ms
singleShotbooltrue表示单次定时
timerTypeQt::TimerType精度类型。分为精确、粗糙、非常粗糙
activeboolture表示定时器正在运行
a.timeout()信号

        当定时器通过 start() 启动后,每当定时溢出一次(定时周期到了),QTimer就会发射一个 timeout() 信号。如果是连续定时,QTimer就会发射多次 timeout() 信号。举个例子:

Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);QTimer *m_timer = new QTimer(this);      //创建定时器,需要动态分配内存m_timer->stop();            //先停止定时器m_timer->setTimerType(Qt::CoarseTimer);     //设置定时器精度等级:粗糙,误差不超过整个周期的5%m_timer->setInterval(3000); //设置定时器的周期为3sm_timer->setSingleShot(true);   //设置单次定时connect(m_timer,SIGNAL(timeout()),this,SLOT(do_timer_timeout()));   //关联定时器的信号与槽
}//与定时器的timeout()信号关联的槽函数
void Widget::do_timer_timeout()
{QApplication::beep();   //定时溢出时,系统的蜂鸣器发声
}//“开始”按钮来启动定时器
void Widget::on_btnStart_clicked()
{m_timer->start();     //启动定时器,m_timer为QTimer类
}

        那么当点击开始按钮后,在3s后就会听到系统的蜂鸣声。

b.静态函数singleShot()

        这个函数用来创建和启动单次定时器,并且将定时器的timeout()信号与指定槽函数关联。也就是说,如果只是定时一次,那么就无须繁琐的设置,也无须启动,随调随用。函数定义如下:

void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *reveiver, const char *member)

那么上面的例子就可以这样改写:

Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);
}//与定时器的timeout()信号关联的槽函数
void Widget::do_timer_timeout()
{QApplication::beep();   //定时溢出时,系统的蜂鸣器发声
}//动态创建单次定时器
void Widget::on_btnOneShot_clicked()
{QTimer::singleShot(3000,Qt::CoarseTimer,this,&Widget::do_timer_timeout);
}

2.QElapsedTimer

        这个类用于快速计算两个事件的间隔时间。与QTimer不同的是,它没有父类,不支持Qt的元对象系统,所以只有一些简单的接口函数。使用起来也比较简单,举个例子即可快速了解:

Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{QElapsedTimer m_counter;   // 创建计时器m_counter.start();    //启动计时器,注意这里没有stop()方法
}//停止计时
void Widget::on_btnStop_clicked()
{int tmMsec=m_counter.elapsed();  //毫秒数int ms= tmMsec % 1000;  //余数毫秒int sec=tmMsec/1000;    //整秒QString str=QString("流逝的时间:%1秒,%2毫秒").arg(sec).arg(ms,3,10,QChar('0'));qDebug() << "Elapsed time:" << str;
}

        点击停止按钮后可看到输出框的结果为:


        以上就是关于Qt中关于时间日期数据的一些总结。虽查阅大量资料,可能仍有部分错误,望读者不吝赐教。

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

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

相关文章

常见sql语句练习

Tips&#xff1a;之前查看网上的文章感觉太乱了&#xff0c;所以自己整理了一套sql语句来练习&#xff0c;主要也可以拿来应对面试&#xff0c;需要的可以自行下载练习 包含基本语句、聚合函数、模糊查询、范围查询、排序、聚合、分组、分页、子查询、索引和视图、左右连接、双…

分享快乐,分享5款我认为好用的软件

​ 分享是奉献的果实&#xff0c;分享是快乐的前提。每天给小伙伴们分享自己认可的软件&#xff0c;也是莫大的一种幸福&#xff0c;今天依然带来五款好用的软件。 1.文本编辑——Notepads ​ Notepads是一款简约高效的文本编辑器&#xff0c;专为Windows10及以上版本设计。它…

Debian linux安装最新版Cmake

直接sudo apt install camke不是最新版本 卸载cmake sudo apt autoremove cmake下载cmake cmake官网 最上面的是候选版本&#xff0c;往下滑是最新稳定版 解压&#xff08;改成自己的包&#xff09; tar -zxvf cmake-3.30.0-rc4.tar.gz进入解压后的文件夹 lscd cmake-3.3…

java常用类(3)

目录 一. 正则表达式 二. Math类 三. Random类 四. Date类 五. Calendar类 六. SimpDateFormate类 七. BigInteger类 八. BigDecimal类 一. 正则表达式 正则表达式(Regular Expression)就是用一些特殊的符号去匹配一个字符串是否符合规则,利用String类中的matches()方…

蒙阴蜜桃节:北纬 35 度的甜蜜盛宴

蒙阴&#xff0c;这座位于北纬 35 度黄金水果带的魅力之城&#xff0c;凭借着沙壤土、长日照、大温差、好生态的天然禀赋&#xff0c;孕育出了令人陶醉的“蒙阴蜜桃——北纬 35 度的甜”。 7月2日—3日&#xff0c;主题为“蒙阴好丰景 桃香产业兴”的国家鲁中山区桃产业集群项目…

3d打开模型的时候怎么没有灯光?---模大狮模型网

在3D建模与渲染过程中&#xff0c;灯光是至关重要的元素之一&#xff0c;直接影响到最终场景的视觉效果和真实感。然而&#xff0c;有时打开3D模型时可能会发现缺乏适当的灯光设置&#xff0c;这会导致场景显得暗淡或平淡无奇。本文将探讨为何在打开3D模型时可能没有灯光的原因…

QGC添加添加QML可访问的单例

文章目录 前言一、添加文件二、修改qgroundcontrol.pro三、修改QGCApplication.cc四、修改QGroundControlQmlGlobal.h五、修改QGroundControlQmlGlobal.cc六、测试前言 QGC 4.2 一、添加文件 在src目录下添加文件夹SingletonTest,在里面新建SingletonTest.cc和SingletonTes…

OCR text detect

主干网络 VoVNet&#xff1a;实时目标检测的新backbone网络_vovnet pytorch-CSDN博客 DenseNet&#xff1a; arxiv.org/pdf/1608.06993 密集连接&#xff1a; DenseNet 的核心思想是将网络中的每一层与其前面的所有层直接连接。对于一个 L 层的网络&#xff0c;DenseNet 具有…

Git学习(常用的一些命令)

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 配置相关&#xff1a; 创建与克隆仓库&#xff1a; 基本操作&#xff1a; 分支操作&#xff1a; 远程仓库操作&#xff1a…

博客的部署方法论

博客写完后&#xff0c;当然是要发布到网络上的。如果想要部署到服务器上&#xff0c;则需编译构建成静态文件&#xff0c;然后将其上传到服务器上的路径&#xff08;该路径由我们自己决定&#xff09;&#xff0c;然后在 web 服务器&#xff08;Nginx 等&#xff09;上配置访问…

m4a如何改为mp3格式?这四种音频转换方法非常好用!

m4a如何改为mp3格式&#xff1f;在当下的生活中&#xff0c;音乐已经成为了人们疲惫时的一剂良药&#xff0c;它不仅可以舒缓心灵&#xff0c;还能够激发情感和启发思维&#xff0c;在众多音频文件格式中&#xff0c;m4a 作为一种常见的格式&#xff0c;备受广大音乐爱好者的青…

OpenCV 张氏标定法

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 “张正友标定法”是由张正友教授于1998年提出的单平面棋盘格的摄像头标定方法,该方法介于传统标定法和自标定法之间,克服了传统标定法需要高精度标定物的缺点,仅需要一个棋盘格即可。作为一种非常经典的相机内参标定…

VS开发QT程序图标修改

VS开发QT程序图标修改 1.双击打开UI界面 2.选择编辑资源 3.添加文件 4.选择ico文件 5.ok确定 6.点击保存 7.选择windowsIcon,倒三角图标 8.选择资源 9.选择图标&#xff0c;点击ok 10.保存 编译运行&#xff1a; 任务栏&#xff1a;

JCR一区级 | Matlab实现BO-Transformer-LSTM多变量回归预测

JCR一区级 | Matlab实现BO-Transformer-LSTM多变量回归预测 目录 JCR一区级 | Matlab实现BO-Transformer-LSTM多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现BO-Transformer-LSTM多变量回归预测&#xff0c;贝叶斯优化Transformer结合LSTM长…

农村生活污水处理监测系统解决方案

一、概述 随着国民经济的发展和农村生活水平的提高&#xff0c;农村生活用水量越来越大&#xff0c;随之而来的污水产量也越来越大&#xff0c;农村生活污染对环境的压力越来越明显。环境保护意识的逐渐增强&#xff0c;使得人们对青山绿水的希望更为迫切&#xff0c;为满足人民…

【Kali-linux for WSL】图形化界面安装

文章目录 前言图形化界面安装 前言 之前在WSL中安装了Kali 启动之后发现什么都没有&#xff01;&#xff01;&#xff01; 那我还怎么学习渗透技术&#xff1f;&#xff1f;&#xff1f; 看来&#xff0c;得改进下我的kali-linux for wsl&#xff0c;安装个图形化界面 图形化…

Omniverse、Isaac Sim、Isaac Lab入门必会之 Nucleus 部署

新手入门Omniverse、Isaac Sim、Isaac Lab时经常发现&#xff0c;要想跑通例程&#xff0c;总是usd等资源加载不出来&#xff0c;软件傻傻的进程阻塞卡在那里&#xff0c;点两下就崩溃&#xff0c;这对新手来说非常的不友好&#xff0c;这都是由于没有安装 Nucleus 或者 Nucle…

蓝蜂网关接入雄安新区物联网统一开放平台应用案例

蓝蜂网关接入雄安新区物联网统一开放平台案例 一、应用背景 为响应国家《河北雄安新区规划纲要》&#xff0c;由中国雄安集团数字城市科技有限公司牵头&#xff0c;以中移物联网有限公司为牵头单位的联合体&#xff0c;构建了雄安新区物联网统一开放平台&#xff08;简称雄安…

springboot美术馆售票管理系统-计算机毕业设计源码17485

目录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 2.2.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 系统总体设…

第三方软件测试公司分享:软件渗透测试的测试内容和注意事项

软件渗透测试是一种通过模拟攻击的方式来评估软件系统的安全性和漏洞&#xff0c;以发现并修复系统中的安全弱点。保护用户的数据和信息不被恶意攻击者利用&#xff0c;也是软件产品开发流程中重要的环节&#xff0c;可以帮助开发团队完善产品质量&#xff0c;提高用户满意度。…