C++ Qt开发:DateTime日期时间组件

Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QDateTime日期与时间组件的常用方法及灵活运用。

在Qt中,日期和时间的处理通常使用 QDateTime 类。QDateTime 是一个用于表示日期和时间的类,而与之相关的组件还包括 QDateQTime以及QDateTime,以下是对这些组件的详细概述。

QDate

QDate 类用于表示日期,包括年、月和日。

主要特点如下:

  • 构造函数: QDate(int year, int month, int day),用于创建一个 QDate 对象。
  • 获取日期信息: 提供了获取年、月、日等日期信息的方法,例如 year()month()day()
  • 比较日期: 可以进行日期的比较,判断日期的先后顺序。
  • 日期格式: 可以以不同的格式输出日期的字符串表示。

以下是 QDate 类的一些常用方法的说明和概述,以表格形式列出:

方法描述
QDate()默认构造函数,创建一个表示当前日期的 QDate 对象。
QDate(int year, int month, int day)构造函数,创建一个指定年、月、日的 QDate 对象。
isValid()检查日期是否有效。
year() const返回年份。
month() const返回月份。
day() const返回日期。
toString(const QString &format) const返回日期的字符串表示,可以通过指定格式进行格式化。
currentDate()静态函数,返回当前系统日期的 QDate 对象。
daysInMonth()返回当前月份的天数。
daysInYear()返回当前年份的天数。
addDays(int days)返回增加指定天数后的 QDate 对象。
addMonths(int months)返回增加指定月数后的 QDate 对象。
addYears(int years)返回增加指定年数后的 QDate 对象。
operator+(int days)重载加法运算符,返回增加指定天数后的 QDate 对象。
operator-(int days)重载减法运算符,返回减去指定天数后的 QDate 对象。
daysTo(const QDate &date) const返回到指定日期的天数差。
monthsTo(const QDate &date) const返回到指定日期的月数差。
yearsTo(const QDate &date) const返回到指定日期的年数差。
isValid()检查日期是否有效。

这些方法提供了对 QDate 进行构造、获取、比较、格式化和运算等操作的灵活性。你可以根据应用的需求使用这些方法,方便地处理日期相关的操作。

QTime

QTime 类用于表示时间,包括小时、分钟、秒和毫秒。

主要特点如下:

  • 构造函数: QTime(int h, int m, int s, int ms = 0),用于创建一个 QTime 对象。
  • 获取时间信息: 提供了获取小时、分钟、秒、毫秒等时间信息的方法,例如 hour()minute()second()
  • 比较时间: 可以进行时间的比较,判断时间的先后顺序。
  • 时间格式: 可以以不同的格式输出时间的字符串表示。

以下是 QTime 类的一些常用方法的说明和概述,以表格形式列出:

方法描述
QTime()默认构造函数,创建一个表示当前时间的 QTime 对象。
QTime(int h, int m, int s, int ms = 0)构造函数,创建一个指定小时、分钟、秒和毫秒的 QTime 对象。
isValid()检查时间是否有效。
hour() const返回小时部分。
minute() const返回分钟部分。
second() const返回秒部分。
msec() const返回毫秒部分。
toString(const QString &format) const返回时间的字符串表示,可以通过指定格式进行格式化。
currentTime()静态函数,返回当前系统时间的 QTime 对象。
addSecs(int secs)返回增加指定秒数后的 QTime 对象。
addMSecs(int msecs)返回增加指定毫秒数后的 QTime 对象。
operator+(int secs)重载加法运算符,返回增加指定秒数后的 QTime 对象。
operator-(int secs)重载减法运算符,返回减去指定秒数后的 QTime 对象。
secsTo(const QTime &t) const返回到指定时间的秒数差。
msecsTo(const QTime &t) const返回到指定时间的毫秒数差。
isValid()检查时间是否有效。

这些方法提供了对 QTime 进行构造、获取、比较、格式化和运算等操作的灵活性。你可以根据应用的需求使用这些方法,方便地处理时间相关的操作。

QDateTime

QDateTime 类结合了日期和时间,用于表示日期和时间的组合。

主要特点如下:

  • 构造函数: QDateTime(QDate date, QTime time),用于创建一个 QDateTime 对象。
  • 获取日期和时间信息: 提供了获取年、月、日、小时、分钟、秒等信息的方法。
  • 比较日期和时间: 可以进行 QDateTime 对象的比较,判断日期和时间的先后顺序。
  • 日期时间格式: 可以以不同的格式输出日期和时间的字符串表示。
  • 时区支持: QDateTime 提供了对时区的支持,可以进行时区的设置和获取。

以下是 QDateTime 类的一些常用方法的说明和概述,以表格形式列出:

方法描述
QDateTime()默认构造函数,创建一个表示当前日期和时间的 QDateTime 对象。
QDateTime(const QDate &date, const QTime &time)构造函数,创建一个由指定日期和时间组成的 QDateTime 对象。
isValid()检查日期和时间是否有效。
date() const返回日期部分。
time() const返回时间部分。
toString(const QString &format) const返回日期和时间的字符串表示,可以通过指定格式进行格式化。
currentDateTime()静态函数,返回当前系统日期和时间的 QDateTime 对象。
addDays(int days)返回增加指定天数后的 QDateTime 对象。
addMonths(int months)返回增加指定月数后的 QDateTime 对象。
addYears(int years)返回增加指定年数后的 QDateTime 对象。
addSecs(int secs)返回增加指定秒数后的 QDateTime 对象。
addMSecs(qint64 msecs)返回增加指定毫秒数后的 QDateTime 对象。
operator+(int secs)重载加法运算符,返回增加指定秒数后的 QDateTime 对象。
operator-(int secs)重载减法运算符,返回减去指定秒数后的 QDateTime 对象。
operator-(const QDateTime &dateTime)重载减法运算符,返回两个日期时间对象之间的时间差。
secsTo(const QDateTime &dateTime) const返回到指定日期时间的秒数差。
msecsTo(const QDateTime &dateTime) const返回到指定日期时间的毫秒数差。
daysTo(const QDateTime &dateTime) const返回到指定日期时间的天数差。
monthsTo(const QDateTime &dateTime) const返回到指定日期时间的月数差。
yearsTo(const QDateTime &dateTime) const返回到指定日期时间的年数差。
toTime_t()将日期时间对象转换为自 1970-01-01 00:00:00 UTC 以来的秒数。
fromTime_t(uint seconds)从自 1970-01-01 00:00:00 UTC 以来的秒数创建日期时间对象。

这些方法提供了对 QDateTime 进行构造、获取、比较、格式化和运算等操作的灵活性。你可以根据应用的需求使用这些方法,方便地处理日期和时间相关的操作。

首先我们来绘制一个简单的日期时间页面,这里需要注意页面中的日期组件DateEditTimeEdit其长得很像之前文章中所提到的SpinBox但其两者是不同的,读者应注意区分两者的不同指出,如下图所示;

首先如何获取日期时间,点击获取日期按钮时我们可以直接通过调用QDate::currentDate()则可获取到当前日期,同理点击获取时间按钮则直接调用QTime::currentTime()实现,左侧三个按钮的功能实现如下所示;

#include <QDate>
#include <QTime>
#include <QDateTime>
#include <iostream>

// 设置日期组件
void MainWindow::on_pushButton_getdate_clicked()
{
    QDate curDate = QDate::currentDate();
    int year = curDate.year();
    int month = curDate.month();
    int day = curDate.day();

    ui->dateEdit->setDate(curDate);
    std::cout << year << "/" << month << "/" << day << std::endl;
}

// 设置时间组件
void MainWindow::on_pushButton_gettime_clicked()
{
    QTime curTime = QTime::currentTime();
    int hour = curTime.hour();
    int minute = curTime.minute();
    int second = curTime.second();

    ui->timeEdit->setTime(curTime);
    std::cout << hour << "/" << minute << "/" << second << std::endl;
}

// 设置日期时间
void MainWindow::on_pushButton_getdatetime_clicked()
{
    QDateTime curDateTime = QDateTime::currentDateTime();
    int yearDT = curDateTime.date().year();
    int monthDT = curDateTime.date().month();
    int dayDT = curDateTime.date().day();
    int hourDT = curDateTime.time().hour();
    int minuteDT = curDateTime.time().minute();
    int secondDT = curDateTime.time().second();

    ui->dateTimeEdit->setDateTime(curDateTime);

    std::cout << yearDT << "/" << monthDT << "/" << dayDT << std::endl;
    std::cout << hourDT << "/" << minuteDT << "/" << secondDT << std::endl;
}

接着我们来实现时间日期组件与字符串之间的转换,当我们需要将字符串转换为日期时可以通过QDateTime::fromString并根据字符串规律对其进行格式化,同理通过使用curDateTime.toString即可实现日期时间转换为字符串。

// 将字符串转为日期
void MainWindow::on_pushButton_stod_clicked()
{
    // 获取字符串
    QString datestr = ui->lineEdit->text();

    datestr = datestr.trimmed();

    // 是否为空
    if(!datestr.isEmpty())
    {
        // 格式化
        QDateTime datetime = QDateTime::fromString(datestr,"yyyy-MM-dd hh:mm:ss");

        // 设置到日期组件上
        ui->dateTimeEdit_convert->setDateTime(datetime);
    }
}

// 将日期转换为字符串
void MainWindow::on_pushButton_dtos_clicked()
{
    QDateTime curDateTime = QDateTime::currentDateTime();
    ui->dateTimeEdit_convert->setDateTime(curDateTime);

    ui->lineEdit->setText(curDateTime.toString("yyyy-MM-dd hh:mm:ss"));
}

程序运行效果如下图所示,读者可通过点击不同的按钮来实现不同的功能;

为了能更加充分的认识时间日期组件,此处我们将通过LCD Number组件实现一个简单的钟表,QLCDNumber 是 Qt 中用于显示数字的小部件,通常用于显示整数或浮点数值。它提供了一个类似于数字显示器或仪表板的外观,可以用于显示各种数值信息。

显示器的使用非常容易,只需要setDigitCount()设置显示长度,并通过setDecMode()设置为十进制输出模式,最后调用display()就可以将一个整数刷新到屏幕上,完整代码如下所示;

#include <QTime>
#include <QTimer>

// 全局定时器变量指针
QTimer *my_timer;

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 声明定时器
    my_timer = new QTimer(this);
    // 绑定一个匿名函数
    connect(my_timer,&QTimer::timeout,[=]{

        // 获取时间
        QTime curTime = QTime::currentTime();
        int hour = curTime.hour();
        int minute = curTime.minute();
        int second = curTime.second();

        // 设置LCD屏幕2位显示
        ui->lcdNumber_hour->setDigitCount(2);
        ui->lcdNumber_minute->setDigitCount(2);
        ui->lcdNumber_hour->setDigitCount(2);

        // 使用十进制
        ui->lcdNumber_hour->setDecMode();
        ui->lcdNumber_minute->setDecMode();
        ui->lcdNumber_second->setDecMode();

        // 刷新参数
        ui->lcdNumber_hour->display(hour);
        ui->lcdNumber_minute->display(minute);
        ui->lcdNumber_second->display(second);
    });

    // 启动定时器1000毫秒执行依次
    my_timer->start(1000);
}

MainWindow::~MainWindow()
{
    delete ui;
}

读者可自行编译运行这段程序,则会看到每隔一秒计时器都会向前递增以为,如下图所示;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【评测脚本】agent资源监控

背景 在之前的文章中提到过,我们在测试过程中需要对机器的资源进行评测。在实际工作中,我们还会经常遇到的场景就是对于agent-server类型的业务,当部署完成后,需要对部署在机器上的agent进行资源占用的观测,不能舍本逐末,由于agent的异常资源占用,导致原有业务受机器资…

直播美颜SDK开发实战:从入门到精通

直播美颜SDK的应用已经成为许多直播平台和开发者关注的焦点。本文将带领读者深入探讨直播美颜SDK的开发实战&#xff0c;从入门到精通的过程。 1.引言 直播美颜SDK是一种集成了图像处理、人脸识别、滤镜算法等技术的开发工具包。通过使用该SDK&#xff0c;开发者能够为直播应…

酸奶店怎么做营销活动来引流,才能吸引顾客进店

今天我想和大家分享的是酸奶店怎么做营销活动来引流&#xff0c;才能吸引顾客进店。 本人经营酸奶店5年时间&#xff0c;以下活动方式都是我亲身经历过的&#xff0c;希望能给大家一些参考。 随着人们对健康饮食的追求不断提高&#xff0c;酸奶作为一种营养丰富、口感独特的食…

IDEA调整内存大小

一、IDEA开启内存显示 双击shift,搜索show memory indicator 打开后重启&#xff0c;右下角显示IDEA内存占用情况 开启后右下角会显示 二、调整内存 双击shift,搜索vmoption 修改-Xms和-Xmx参数&#xff0c;如下&#xff1a; -Xms:最小内存 -Xmx:最大内存 设置完成后&…

apt-mark工具介绍(标记或取消标记软件包,防止特定软件包被自动更新或删除)

文章目录 apt-mark工具深度解析1. apt-mark概述1.1 apt-mark定义1.2 apt-mark作用 2. apt-mark常用命令2.1 标记软件包为手动安装2.2 标记软件包为自动安装2.3 阻止软件包更新2.4 允许软件包更新 3. 疑难技术点解析3.1 如何查看软件包的标记状态3.2 如何解决软件包依赖性问题 4…

Python | 高斯分布拟合示例

什么是正态分布或高斯分布&#xff1f; 当我们绘制一个数据集&#xff08;如直方图&#xff09;时&#xff0c;图表的形状就是我们所说的分布。最常见的连续值形状是钟形曲线&#xff0c;也称为高斯分布或正态分布。 它以德国数学家卡尔弗里德里希高斯的名字命名。遵循高斯分布…

IDEA debug窗口左边工具栏隐藏与显示

今天在debug排查代码的时候一不小心点到哪里&#xff0c;结果变成这样 我们可以这样恢复&#xff0c;右键Debug 点击show Toolbar

python中else的细节

if-else 首先我们都知道else可以和if共同使用&#xff0c;如果if条件没有执行&#xff0c;就会去执行else语句 a100 if a100:print("if 语句执行了") else:print("else语句执行了") a10 if a100:print("if 语句执行了") else:print("else…

联想笔记本如何安装Vmware ESXi

环境&#xff1a; Vmware ESXi 8.0 Vmware ESXi 6.7 联想E14笔记本 问题描述&#xff1a; 联想笔记本如何安装Vmware ESXi 解决方案&#xff1a; 1.官网下载镜像文件 https://customerconnect.vmware.com/en/downloads/search?queryesxi%208 下载 2.没有账户注册一个 …

jmeter接口测试项目实战详解,零基础也能学

1.什么是jmeter&#xff1f; JMeter是100%完全由Java语言编写的&#xff0c;免费的开源软件&#xff0c;是非常优秀的性能测试和接口测试工具&#xff0c;支持主流协议的测试 2.jmeter能做什么&#xff1f; 1.JMeter是100%完全由Java语言编写的软件性能测试的GUI的测试工具&…

mysql 5.7.34升级到5.7.44修补漏洞

mysql 5.7.34旧版本&#xff0c;漏扫有漏洞&#xff0c;升级到最新版本 旧版本5.7.34在 /home/mysql/mysql中安装 备份旧版本数据还有目录 数据库备份升级 tar -xf mysql-5.7.44-el7-x86_64.tar #覆盖旧版本数据库文件 #注意看看文件是否和你起服务的用户一样 \cp -r mysql-5…

C语言之⽂件操作

一为啥需要文件&#xff1f; 如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运⾏程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进⾏持久化的保…

JOSEF 组合中间继电器 RXMM1-RK214003 DC220V 不带底座

系列型号 RXMM1 RK 214 002组合中间继电器&#xff1b;RXMM1 RK 214 003组合中间继电器; RXMM1 RK 214 004组合中间继电器&#xff1b;RXMM1 RK 214 005组合中间继电器; RXMM1 RK 214 006组合中间继电器&#xff1b; 1 用途 RXMM1系列组合中间继电器用于电力系统二次回路及…

【C语言(十三)】

自定义类型&#xff1a;结构体 一、结构体类型的声明 1.1、结构体回顾 结构是⼀些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.1.1、结构的声明 例如描述⼀个学生&#xff1a; struct Stu {char name[20];//名字int age;//年龄c…

使用Axure RP结合内网穿透工具制作本地静态web页面并实现公网访问

作者简介&#xff1a; 懒大王敲代码&#xff0c;正在学习嵌入式方向有关课程stm32&#xff0c;网络编程&#xff0c;数据结构C/C等 今天给大家讲解使用Axure RP结合内网穿透工具制作本地静态web页面并实现公网访问&#xff0c;希望大家能觉得实用&#xff01; 欢迎大家点赞 &am…

ubuntu下搜索文件的几种方法

一、whereis命令&#xff1a; whereis命令只能用于程序名的搜索&#xff0c;而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数&#xff0c;则返回所有信息。 whereis的命令格式&#xff1a; whereis [-bmsu] [BMS 目录名 -f ] 文…

浅析:智能化视频安全监管系统的设计与实现步骤

关于智能化视频监管方案&#xff0c;小编已经和大家分享了很多&#xff0c;今天就和大家来探讨一下关于智能化视频安全监管系统的设计与实现步骤。 首先需要分析需求。要与使用者和业务部门合作&#xff0c;明确系统的功能和需求&#xff0c;例如&#xff0c;确定监控区域、安…

机器学习---KNN最近邻算法

1、KNN最近邻算法 K最近邻(k-Nearest Neighbor&#xff0c;KNN)分类算法&#xff0c;是一个理论上比较成熟的方法&#xff0c;也是最简单的机器学习算法之一&#xff0c;有监督算法。该方法的思路是&#xff1a;如果一个样本在特征空间中的k个最相似的样本中的大多数属于某一个…

【加法减法选择计数器_2023.12.15】

功能 计数器位宽为 4&#xff1b;可以实现同步清零&#xff0c;及同步置数的功能&#xff1b;通过一个输入信号来选择&#xff0c;实现加法计数和减法计数&#xff1a; 如果加到最大值后继续加&#xff0c;或减到0后继续减时&#xff0c;计数器不变&#xff1b; 实现 sel端口…

关东升老师从小白到大牛系列丛书(由清华大学出版社出版)

助力技术成长&#xff0c;成就大牛之路 在这个科技日新月异的时代&#xff0c;掌握一门编程语言或专业技能已是必备&#xff0c;不再是奢侈。清华大学出版社出版的“从小白到大牛”的系列丛书&#xff0c;涵盖Python、Java、Kotlin、Android和SQL&#xff0c;助你快速在技术之…