• Qt学习总结之QDateTimeEdit


    一.描述

    1.QDateTimeEdit是一个用来编辑日期和时间的单行文本框,由于大继承自QAbstractSpinBox类,可以用箭头按钮来调节文本内容,也可以用键盘输入。在用按钮修改内容时可以单独修改某个部分(年、月、日、小时、分)

    2.QDateTimeEdit可以用来单独显示日期(QDate),也可以单独显示时间(QTime),当然也可以显示日期时间(QDateTime)

    二.QDateTime的使用

    QDateTime是用来描述日期和时间的对象,他是QDate和QTime两个类的组合,包含了年月日/小时分秒毫秒。
    1、构造函数
    按照下面的方式构造对象都是可以的。

    
    QDate mdate = QDate(2012,1,1);
    QTime mtime = QTime(12,12,12);
    QDateTime mdate1 = QDateTime(mdate);
    QDateTime mdate3 = QDateTime(mdate,mtime);
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2、计算时间差

    int utc_time = m_datetime.offsetFromUtc();      //与标准时区的时间差
    qDebug()<<"utc 时间差"<<utc_time;
    QDate m_date1 = QDate(2012,10,2);
    int day_cnt = m_date1.daysTo(QDate::currentDate());
    qDebug()<<"相差天数"<<day_cnt;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3、获取时间

    QDateTime datetime = QDateTime::currentDateTime();
    qDebug()<<"当前时间"<<datetime;
    
    QDate date = QDate::currentDate();
    qDebug()<<"当前日期"<<date;
    
    QTime time = QTime::currentTime();
    qDebug()<<"当前time"<<time;
    
    int day = date.day();
    qDebug()<<"当前月下第几日"<<day;
    
    int month = date.month();
    qDebug()<<"第几月"<<month;
    
    int year = date.year();
    qDebug()<<"哪一年"<<year;
    
    int month_day_num = date.daysInMonth();
    qDebug()<<"当前月有多少天"<<month_day_num;
    
    int year_day_num = date.daysInYear();
    qDebug()<<"当前年有多少天"<<year_day_num;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    三.QDateTimeEdit的应用

    1.构造函数

    m_DateTimeEdit = new QDateTimeEdit(QDateTime::currentDateTime(),this);
    
    m_DateTimeEdit = new QDateTimeEdit(QDate::currentDate(),this);
    
    m_DateTimeEdit = new QDateTimeEdit(QTime::currentTime(),this);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.显示格式

    QDateTImeEdit里每一个部分(年月日时分秒)都是一个section,我们可以根据指定的样式来改变显示格式

    m_DateTimeEdit->setDisplayFormat("yyyy-MM-dd-hh-mm-ss");
    
    
    • 1
    • 2

    指定的格式有时间格式符,可以直接使用

    h -----------------没有前导0的小时(0——12或0——23)
    hh ---------------有前导0的小时(00——12或00——23)
    H -----------------没有前导0的显示(0——23)
    HH ---------------有前导0的显示(00——23)
    m -----------------没有前导0的分钟(0——59)
    mm --------------有前导0的分钟(00——59)
    s ------------------没有前导0的秒(0——59)
    ss -----------------有前导0的秒(00——59)
    z -------------------第二个小数部分,没有尾随0的毫秒(0——999)
    zzz ----------------第二个小数部分,有尾随0的毫秒(000——999)
    AP/A --------------用AM/PM显示(只用一种就可以)
    ap/a ---------------用am/pm显示
    t --------------------时区

    还有日期的格式符

    d -------------- 没有前导0的数字日期(1——31)
    dd ------------ 有前导0的数字日期(01——31)
    ddd ----------- 缩写的本地化日期名称(周日——周六,Sun——Sat)
    dddd ---------- 完整的本地化日期名称(星期日——星期六)
    M -------------- 没有前导0的数字月(1——12月)
    MM ------------ 有前导0的数字月(01——12)
    MMM --------- 缩写的本地化月份(1月——12月)
    MMMM ------- 完整的本地化月份(一月——十二月)
    yy -------------- 年的后两位
    yyyy ----------- 年(4位)

    效果如下:
    在这里插入图片描述
    3.日历选择控件

    m_DateTimeEdit->setCalendarPopup(true);
    
    • 1

    效果如下:
    在这里插入图片描述

    四.信号

    日期发生改变

    信号中都传递了相对应的QDateTime或QDate的参数。要注意的是信号发出是在数据彻底发生改变后,比如用键盘输入年份,只有当2019全输入后才会发送信号。

    QDateTimeEdit::dateTimeChanged()     //日期时间发生改变    
    QDateTimeEdit::dateChanged()         //日期发生改变    
    QDateTimeEdit::timeChanged()         //时间发生改变
    
    • 1
    • 2
    • 3

    源码:

    mainwindow.c

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include 
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        this->resize(800,600);
        QDateTime m_datetime = QDateTime::currentDateTime();
    
        QDate mdate = QDate(2012,1,1);
        QTime mtime = QTime(12,12,12);
        QDateTime mdate1 = QDateTime(mdate);
        QDateTime mdate3 = QDateTime(mdate,mtime);
    
    
    
        m_DateTimeEdit = new QDateTimeEdit(m_datetime,this);
    
    //    m_DateTimeEdit = new QDateTimeEdit(QDate::currentDate(),this);
    
    //    m_DateTimeEdit = new QDateTimeEdit(QTime::currentTime(),this);
    
        m_DateTimeEdit->setGeometry(100,100,200,40);
    
    
        int utc_time = m_datetime.offsetFromUtc();      //与标准时区的时间差
        qDebug()<<"utc 时间差"<<utc_time;
        QDate m_date1 = QDate(2012,10,2);
        int day_cnt = m_date1.daysTo(QDate::currentDate());
        qDebug()<<"相差天数"<<day_cnt;
    
        QDateTime datetime = QDateTime::currentDateTime();
        qDebug()<<"当前时间"<<datetime;
    
        QDate date = QDate::currentDate();
        qDebug()<<"当前日期"<<date;
    
        QTime time = QTime::currentTime();
        qDebug()<<"当前time"<<time;
    
        int day = date.day();
        qDebug()<<"当前月下第几日"<<day;
    
        int month = date.month();
        qDebug()<<"第几月"<<month;
    
        int year = date.year();
        qDebug()<<"哪一年"<<year;
    
        int month_day_num = date.daysInMonth();
        qDebug()<<"当前月有多少天"<<month_day_num;
    
        int year_day_num = date.daysInYear();
        qDebug()<<"当前年有多少天"<<year_day_num;
    
        m_DateTimeEdit->setDisplayFormat("yyyy-MM-dd-hh-mm-ss");
    
        m_DateTimeEdit->setCalendarPopup(true);
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
  • 相关阅读:
    pg 函数匹配规则
    Android学习之路(16) Android 数据库Litepal
    软考-密码学概述
    策略模式,一种广泛应用于各种情况的设计模式(设计模式与开发实践 P5)
    LeetCode 刷题系列 -- 98. 验证二叉搜索树
    zabbix监控windows进程
    redis-持久化
    2. Java并发编程-互斥锁、死锁
    S32K144芯片焊接完成后使用S32DS初次下载无法下载解决方法
    6聚合根与资源库 #
  • 原文地址:https://blog.csdn.net/qq_27726087/article/details/126480390