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;
}

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

C++ Qt开发:DateTime日期时间组件的更多相关文章

  1. IOS开发—UIDatePicker 日期/时间选取器(滚轮)

    UIDatePicker 是一个控制器类,封装了 UIPickerView,但是他是UIControl的子类,专门用于接受日期.时间和持续时长的输入.日期选取器的各列会按照指定的风格进行自动配置,这样 ...

  2. WP开发笔记——日期时间DateTime.Now函数

    //2008年4月24日 System.DateTime.Now.ToString("D"); //2008-4-24 System.DateTime.Now.ToString(& ...

  3. 日期时间组件 - layui.laydate

    全部参数 一.核心方法:laydate(options); options是一个对象,它包含了以下key: '默认值' { elem: '#id', //需显示日期的元素选择器 event: 'cli ...

  4. 27flutter日期 时间组件flutter_cupertino_date_picker的使用

    pubspec.yaml flutter_cupertino_date_picker: ^ DatePicker.dart import 'package:date_format/date_forma ...

  5. 如何在Rails6内通过Webpacker使用JavaScript; flatpicker日期时间组件选择器

    如何在Rails6内通过Webpacker使用JavaScript; Rails6默认不再使用asset pipeline,改用Webpacker. 文件结构变化: 配置文件: webpacker.y ...

  6. String.Format,DateTime日期时间格式化

    DateTime dt = DateTime.Now;//2010年10月4日 17点05分            string str = "";            //st ...

  7. flutter DateTime日期&时间选择器

    import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'dart:async'; class ...

  8. 【转载】Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码

    本文转载自脚本之家,源网址为:https://www.jb51.net/article/147429.htm 一.Python中日期时间模块datetime介绍 (一).datetime模块中包含如下 ...

  9. python 日期、时间处理,各种日期时间格式/字符串之间的相互转换究竟是怎样的?

    模块函数说明 ''' date 日期对象,常用的属性有year,month,day time 时间对象,常用的属性有hour,minute,second,毫秒 datetime 日期时间对象,常用的属 ...

  10. SQLite 日期 & 时间

    具体看http://www.runoob.com/sqlite/sqlite-date-time.html 不过实例介绍的不够详细,以下详细举例: SQLite包含了如下时间/日期函数:datetim ...

随机推荐

  1. Pandas 使用教程 JSON

    目录 JSON 转换为 CSV 简单 JSON 从 URL 中读取 JSON 数据: 字典转化为 DataFrame 数据 内嵌的 JSON 数据 复杂 JSON Pandas 可以很方便的处理 JS ...

  2. Vue【原创】基于elementui的【分组多选下拉框group-select】

    效果图: 如图分为多选模式和单选模式. group-select: 1 <template> 2 <div> 3 <el-select 4 v-model="i ...

  3. WPF MVVM之点滴分享

    (第五点:绑定源有修改) 我并不打算长篇累牍的介绍什么是MVVM.我尽量简洁的介绍,并把自己的经验分享给大家. 一.关于MVVM M:Model,数据模型(后台存储数据的类) V:View,视图(大部 ...

  4. Andrew Ng 机器学习&深度学习课程 代码作业解答 集合

    写在最前 ​ 2018年是对自己来说是崭新的一年,在过去的3个多月里,从最基础的lr, 学到现在的LSTM, GAN..感觉第一次追上了计算机科学飞速发展的浪潮.虽然很多地方都仍是一知半解,但时间还长 ...

  5. WorkPress使用BackWPup插件备份后手动还原方法记录

    前提 拿到BackWPup插件备份的zip包(下文均以backup.zip来指代).这个是备份包是事先从源WorkPress上备份好的. 环境 OS:Centos7.9 Apache:2.4.6 PH ...

  6. 618京东到家APP-门详页反爬实战

    一.背景与系统安全需求分析 1. 系统的重要性 上图所示是接口所属位置.对电商平台或在线商店而言,分类查商品都是很重要的,通过为用户提供清晰的商品分类,帮助他们快速找到所需产品,节省浏览时间,提升购物 ...

  7. 5.2 磁盘CRC32完整性检测

    CRC校验技术是用于检测数据传输或存储过程中是否出现了错误的一种方法,校验算法可以通过计算应用与数据的循环冗余校验(CRC)检验值来检测任何数据损坏.通过运用本校验技术我们可以实现对特定内存区域以及磁 ...

  8. oracle 验证流水存在性火箭试优化

    在生产中经常遇到"select * from  tbl_IsExist where date=?"的SQL,经与开发人员沟通得知此SQL是验证流水存在性,若不存在则插入,若存在退出 ...

  9. stm32开发笔记

    STM32F103C8T6单片机简介 标准库与HAL库区别 寄存器 寄存器众多,需要经常翻阅芯片手册,费时费力: 更大灵活性,可以随心所欲达到自己的目的: 深入理解单片机的运行原理,知其然更知其所以然 ...

  10. ts 终于搞懂TS中的泛型啦! | typescript 入门指南 04

    大家好,我是王天~ 这篇文章是 ts入门指南系列中第四篇,主要讲解ts中的泛型应用,泛型在ts中是比较重要的概念,我花挺长时间才搞明白的,希望能帮助到大家 ~ ** ts 入门指南系列 ** Ts和J ...