Qt:QDateTime、QDate、QTime與QDateTimeEdit


時間日期是經常遇到的數據類型,Qt中的時間日期類如下:

  • QTime:時間類型,只表示時間,如15:23:13;
  • QDate:日期類型,只表示日期,如2017-4-5;
  • QDateTime:日期時間類型,表示日期和時間,如2017-03-23 08:12:43;

Qt中有專門用於日期、時間編輯和顯示的界面組件:

  • QTimeEdit:編輯和顯示時間的組件;
  • QDateEdit:編輯和顯示日期的組件;
  • QDateTimeEdit:編輯和顯示日期時間的組件;
  • QCalendarWidget:一個用日歷形式選擇日期的組件。

實例程序samp4_5演示了這些時間日期相關類的使用,其運行界面如下圖所示:

 

 

 QDateTime與QString之間的轉換

時間、日期編輯器屬性設置

在上圖左上角“日期時間”Groupbox中,使用QTimeEdit、QDateEdit、QDateTimeEdit組件作為時間、日期、日期時間編輯器;在其右側,各放置一個QLineEdit組件用於字符串顯示

QDateEditQTimeEdit都從QDateTimeEdit繼承而來,實現針對日期時間特定顯示功能。實際上,QDateEditQTimeEdit的顯示功能都可以通過QDateTimeEdit實現,只需要設置好屬性就可以了。

QDateTimeEdit類的主要屬性如下:

  • datetime日期時間
  • date日期;設置datetime時會自動改變date;同時,設置date時,也會自動改變datetime中的日期;
  • time時間;和date類似,設置datetimetime時會互相改變對方的值;
  • maximumDateTime、minimumDateTime:最大、最小時間日期;
  • maximumTime、minimumTime:最大、最小時間;
  • currentSection:當前輸入光標所在的時間日期數據段,是枚舉類型QDateTimeEdit::SectionQDateTimeEdit顯示日期時間數據時分為多個,單擊編輯框右側的按鈕可以修改當前段的值。如輸入光標在Year Section段,就修改“年”的值;
  • currentSectionIndex:用序號表示輸入光標所在的
  • calendarPopup:是否允許彈出一個日歷框;取值為true時,右側的輸入按鈕變為下拉按鈕,單擊按鈕時出現一個日歷框,用於在日歷上選擇日期。對於QTimeEdit,此屬性無效
  • displayFormat:格式化顯示;如果設置為“yyyy-MM-dd HH:mm:ss”,一個日期時間數據就顯示為“2016-11-02 08:23:46

QDateTime的獲取與QString的轉換

讀取當前日期時間”按鈕的clicked()信號的槽函數中,寫如下代碼:

void Widget::on_btnGetTime_clicked()
{
    //獲取當前日期時間,為三個專用編輯器設置日期時間數據,並轉換為字符串
    QDateTime curDateTime = QDateTime :: currentDateTime();
    ui->timeEdit->setTime(curDateTime.time());
    ui->editTime->setText(curDateTime.toString("hh:mm:ss"));
    ui->dateEdit->setDate(curDateTime.date());
    ui->editDate->setText(curDateTime.toString("yyyy-MM-dd"));
    ui->dateTimeEdit->setDateTime(curDateTime);
    ui->editDateTime->setText(curDateTime.toString("yyyy-MM-dd hh:mm:ss"));
}

首先用QDateTime類的靜態函數currentDateTime()獲取當前日期時間,並賦值給變量curDateTime

然后用curDateTime變量設置界面上的3個Date、Time、DateTime,利用QDateTimetime()、date()分別提取timedate

curDateTime表示的日期時間轉換為字符串,然后在LineEdit編輯框上顯示。轉換時使用了QDateTimetoString()函數,函數參數指定了顯示Time、Date、DateTime的格式:

QString QDateTime :: toString ( QString format )

它將日期按照format指定的格式轉換為字符串format是一個字符串,包含一些特定的字符,表示DateTime的各個部分,下表顯示了常用format

字符 意義
d 天,不補零顯示,1-31
dd 天,補零顯示,01-31
M 月,1-12
MM 月,01-12
yy 年,00-99
yyyy 年,0000-9999
h 小時,0-23或1-12(如果顯示AM/PM)
hh 小時,00-23或01-12(如果顯示AM/PM)
H 小時,0-23
HH 小時,00-23
m 分鍾,0-59
mm 分鍾,00-59
s 秒,0-59
ss 秒,00-59
z 毫秒,0-999
zzz 毫秒,000-999
AP或A AM/PM
ap或A am/pm

在設置DateTime顯示字符串時,還可以使用填字符,甚至使用漢字。例如:

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

這樣得到的字符將是“2021年6月6日”。

QString轉換為DateTime

QString轉換為QTime、QDate、QDateTime類型,需要使用靜態函數QDateTime::fromString()

QDateTime QDateTime :: fromString( string , format )

第一個參數stringDateTime字符串,第二個參數format格式,按照之前的格式表定義。

 

在程序運行時,手工修改“日期時間”后面文本框editDateTime中的DateTime字符串,單擊“設置日期時間”按鈕,可以將文本框中的QString轉換為QDateTime變量,並設置為左側DateTimeEdit組件的DateTime數據:

void Widget::on_btnSetDateTime_clicked()
{
    //QString轉換為QDateTime
    QString str = ui->editDateTime->text();
    str = str.trimmed();
    if( !str.isEmpty() )
    {
        QDateTime datetime = QDateTime::fromString(str,"yyyy-MM-dd hh:mm:ss");
        ui->dateTimeEdit->setDateTime(datetime);
    }
}

程序中,字符串str按照格式yyyy-MM-dd hh:mm:ss轉換為日期時間變量。

 

QCalendarWidget日歷組件

圖1右側是QCalendarWidget組件,它以日歷的形式顯示日期,可以用於日期選擇。QCalendarWidget有一個信號selectionChanged(),在日歷上選擇的日期變化后會發射此信號,為此信號創建槽函數,編寫代碼如下:

void Dialog :: on_calendarWidget_selectionChanged()
{
    //在日歷上選擇日期
    QDate dt = ui->calendarWidget->selectedDate();
    QString str = dt.toString("yyyy 年 M 月 d 日");
    ui->editCalendar->setText(str);
}

 總結

1、有三種日期時間類型QTime、QDate、QDateTime,格式與Python中的同名類相同。

2、假設有三個時間日期相關的控件QDateTimeEdit、QTimeEdit、QDateEdit及其對應的對象名為datetimeEdit、timeEdit、dateEdit,為這三個對象set的函數分別是setDateTime( QDateTime )、setTime( QTime )、setDate( QDate ):

QDateTime now = QDateTime::currentDateTime();
ui->timeEdit->setTime( now.time() );
ui->dateEdit->setDate( now.date() );
ui->datetimeEdit->setDateTime( now );

3、QDateTimeQString:

QString QDateTime :: toString ( format )

例如:

time_str = now.toString("hh:mm:ss");
date_str = now.toString("yyyy-MM-dd");
datetime_str = now.toString("yyyy-MM-dd hh:mm:ss");

只需要在format中用指定格式說明要輸出的內容,就可以正確的輸出想要的時間日期字符串了。

4、QStringQDateTime、QTime、QDate:

static QDateTime QDateTime :: fromString ( string , format )
QString str = ui->editxxx->text();//從某個QLineEdit中讀取輸入的QString

...//對str做處理

QDateTime datetime = QDateTime :: fromString( str , "yyyy-MM-dd hh:mm:ss" );//QString→QDateTime

//顯示QDateTime
ui->datetimeEdit->setDateTime(datetime);

5、日歷控件:QCalendarWidget

有一個選擇日期的信號selectionChanged(),在日歷上選擇日期后,可以得到一個QDate對象:

QDate dt = ui->calendarWidget->selectedDate();

QString str = dt.toString("yyyy年M月d日");//對QDate進行處理

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM