Qt时间和定时器

1、Qt获取当前系统时间

QTime:时间数据类型,仅表示时间,如15:23:13。

QDate:日期数据类型,仅表示日期,如2017-4-5。

QDateTime:日期时间数据类型,表示日期和时间,如2017-03-23 08:12:43。

QTimeEdit、QDataEdit、QDataTimeEdit

//时间显示
QTime----------时间, QDate--------------日期,
 //显示当前系统时间
QString t = QTime::currentTime().toString("hh:mm:ss");
ui->lcdNumber->display(t);
qDebug()<<t;
    
QString d = QDate::currentDate().toString("yyyy-MM-dd");
ui->label->setText(d);
qDebug()<<d;

QDateTime curDateTime=QDateTime::currentDateTime();

2、QT用于时间编辑显示相关控件

1、主要控件

QTimeEdit:编辑和显示时间的组件。

QDateEdit:编辑和显示日期的组件。

QDateTimeEdit:编辑和显示日期时间的组件。

QCalendarWidget: 一个用日历形式选择日期的组件。

2、QDateTimeEdit类

QDateEdit 和 QTimeEdit 都从 QDateTimeEdit 继承而来,实现针对日期或时间的特定显示功能。实际上,QDateEdit 和 QTimeEdit 的显示功能都可以通过 QDateTimeEdit 实现,只需设置好属性即可。

QDateTimeEdit 类的主要属性的介绍如下:

  • datetime:日期时间。
  • date:日期,设置 datetime 时会自动改变 date,同样,设置 date 时,也会自动改变 datetime 里的日期。
  • time:时间,设置 datetime 时会自动改变 time,同样,设置 time 时,也会自动改变 datetime 里的时间。
  • maximumDateTime、 minimumDateTime:最大、最小日期时间。
  • maximumDate、minimumDate:最大、最小日期。
  • maximumTime、minimumTime:最大、最小时间。
  • currentSection:当前输入光标所在的时间日期数据段,是枚举类型 QDateTimeEdit::Section。QDateTimeEdit 显示日期时间数据时分为多个段,单击编辑框右侧的上下按钮可修改当前段的值。如输入光标在YearSection段,就修改“年”的值。
  • currentSectionIndex:用序号表示的输入光标所在的段。
  • calendarPopup:是否允许弹出一个日历选择框。当取值为 true 时,右侧的输入按钮变成与 QComboBox 类似的下拉按钮,单击按钮时出现一个日历选择框,用于在日历上选择日期。对于 QTimeEdit,此属性无效。
  • setdisplayFormat:显示格式,日期时间数据的显示格式,例如设置为“yyyy-MM-dd HH:mm:ss”,一个日期时间数据就显示为“2016-11-02 08:23:46”。

3、日期时间数据与字符串之间的转换

字符意义
d天,不补零显示,1-31
dd天,补零显示,01-31
M月,不补零显示,1-12
MM月,补零显示,01-12
yy年,两位显示,00-99
yyyy年,4位数字显示,如 2016
h小时,不补零,0-23 或 1-12 (如果显示 AM/PM)
hh小时,补零2位显示,00-23 或 01-12 (如果显示 AM/PM)
H小时,不补零,0-23 (即使显示 AM/PM)
HH小时,补零显示,00-23 (即使显示 AM/PM)
m分钟,不补零,0-59
mm分钟,补零显示,00-59
z毫秒,不补零,0-999
zzz毫秒,补零 3 位显示,000-999
AP或A使用 AM/PM 显示
ap或a使用 am/pm 显示

时间转字符串

xxx.toString()

xxx.toString(格式)

curDateTime.toString (“yyyy 年 MM 月 dd 日”);

字符串转时间

这里将字符串 str 按照格式 yyyy-MM-dd hh:mm:ss 转换为日期时间变量,格式是指字符串 str 所表示的日期时间的格式。

datetime=QDateTime::fromString(str,“yyyy-MM-dd hh:mm:ss”);

日历 QCalendarWidget

//获取日历上点中的日期

QDate dt=ui->calendarWidget->selectedDate(); QString str=dt.toString("yyyy年 M 月 d 日"); ui->editCalendar->setText(str);

参考:https://blog.csdn.net/xiaolong1126626497/article/details/119277019

//一.  秒单位时间转为字符串时、分、秒格式输出
    int time_sec=100;
    QString timer=QTime(0, 0, 0).addSecs(int(time_sec)).toString(QString::fromLatin1("HH:mm:ss"));
    qDebug()<<timer; //输出:"00:01:40"
//二.  秒单位时间转为字符串时、分、秒、毫秒格式输出
    int time_sec=100;
    QString timer=QTime(0, 0, 0,0).addSecs(int(time_sec)).toString(QString::fromLatin1("HH:mm:ss:zzz"));
    qDebug()<<timer; //输出:"00:01:40:000"
//三.  毫秒单位时间转为字符串时、分、秒、毫秒格式输出
    int time_ms=1234;
    QString timer=QTime(0, 0, 0,0).addMSecs(int(time_ms)).toString(QString::fromLatin1("HH:mm:ss:zzz"));
    qDebug()<<timer; //输出:""00:00:01:234""
//四、将字符串时、分、秒转为秒单位时间
     QString time_str="01:20:30"; //时分秒
     QTime time=QTime::fromString(time_str);
     qDebug()<<"时:"<<time.hour();
     qDebug()<<"分:"<<time.minute();
     qDebug()<<"秒:"<<time.second();
     qDebug()<<"总秒数:"<<time.hour()*60*60+time.minute()*60+time.second();
/*
时: 1
分: 20
秒: 30
总秒数: 4830
*/
//五、将字符串时、分、秒、毫秒转为毫秒单位时间
     QString time_str="01:20:30.300"; //时分秒毫秒
     QTime time=QTime::fromString(time_str);
     qDebug()<<"时:"<<time.hour();
     qDebug()<<"分:"<<time.minute();
     qDebug()<<"秒:"<<time.second();
     qDebug()<<"毫秒:"<<time.msec();
     qDebug()<<"总毫秒数:"<<time.hour()*60*60*1000+time.minute()*60*1000+time.second()*1000+time.msec();
/*
时: 1
分: 20
秒: 30
毫秒: 300
总毫秒数: 4830300
*/

4、定时器

在Qt的界面程序中,不能在槽函数中使用sleep函数,while死循环或者其他有长时间延时的工作。因为QT的UI线程是用来刷新界面(轮询事件),如果有一个延时工作,那么就会导致UI线程卡死。

#include <Qtimer>
执行周期任务
QTimer *myT;
//创建定时器
myT = new QTimer;
//开始定时器
myT->start(1000);
//关联计时结束的槽函数
connect(myT, &QTimer::timeout, this, &MainWindow::change_value);
//停止定时器
myT->stop();

2.2 执行一次性工作
QTimer::singleShot(5000, this, SLOT(show_test()));

随机数

 	int num1 = qrand();

    //设置随机数因子
    qsrand(111);
    int num2 = qrand();

    //把时间作为随机数因子
    qsrand(QDateTime::currentMSecsSinceEpoch());
    qDebug()<<QDateTime::currentMSecsSinceEpoch();
    int num3 = qrand();

    qsrand(QDateTime::currentMSecsSinceEpoch());
    int num4 = qrand()%10 + 1;

闹钟定、时器、秒表test:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yengi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值