Qt之QDateEdit和QTimeEdit

weixin_34186950發表於2016-09-01

簡述

QDateEdit類提供了一個部件,用於編輯日期。QTimeEdit類提供了一個部件,用於編輯時間。

詳細描述

QDateEdit和QTimeEdit均繼承自QDateTimeEdit,許多特性和功能都有QDateTimeEdit提供。這些都是相關屬性:

  • QDateEdit

    • date:儲存了部件的顯示日期。
    • minimumDate:定義了使用者可以設定的最小日期。
    • maximumDate:定義了使用者可以設定的最大日期。
    • displayFormat:包含了一個字串用於格式化日期。
  • QTimeEdit

    • time:儲存了部件的顯示時間。
    • minimumTime:定義了使用者可以設定的最小時間。
    • maximumTime:定義了使用者可以設定的最大時間。
    • displayFormat:包含了一個字串用於格式化時間。

前面的眾多文章,基本上都在分享的如何使用?本節比較特殊,因為該講的在Qt之QDateTimeEdit一節已經分享過了。下面主要分享QDateEdit和QTimeEdit使用過程中可能遇到的坑。

基本使用

使用QDateEdit時,如果不設定日期,則系統會為其指定一個預設的日期:2000年1月1日。使用QTimeEdit時,如果不設定時間,則系統會為其指定一個預設的時間:0時0分0秒。所以,我們一般都會指定一個合適的日期和時間(當前日期時間)。

這裡寫圖片描述

QDateEdit *dateEdit = new QDateEdit(QDate::currentDate(), this);
QTimeEdit *timeEdit = new QTimeEdit(QTime::currentTime(), this);

各司其職

如上所述,QDateEdit用於編輯日期,而QTimeEdit用於編輯時間。所以不要用QDateEdit來設定或獲取時間,也不要用QTimeEdit來設定或獲取日期。如果要同時操作日期時間,請使用QDateTimeEdit。

這裡寫圖片描述

QDateEdit *dateEdit = new QDateEdit(this);
QTimeEdit *timeEdit = new QTimeEdit(this);

// 錯誤(語法正確)
dateEdit->setDisplayFormat("yyyy/MM/dd HH:mm:ss");
timeEdit->setDisplayFormat("yyyy/MM/dd HH:mm:ss");

// 正確
//dateEdit->setDisplayFormat("yyyy/MM/dd");
//timeEdit->setDisplayFormat("HH:mm:ss");

// 設定日期時間
dateEdit->setDateTime(QDateTime::currentDateTime());
timeEdit->setDateTime(QDateTime::currentDateTime());

顯然,當點選QDateEdit的上下箭頭時,只能改變日期,而改變不了時間。同理,當點選QTimeEdit的上下箭頭時,只能改變時間,而改變不了日期。

所以,即使語法正確,也不建議把QDateEdit和QTimeEdit當做QDateTimeEdit來用。

注意:即使是設定顯示格式,對於QDateEdit來說,只需要設定年月日即可,例如:yyyy/MM/dd;對於QTimeEdit只需要設定時分秒,例如:HH:mm:ss。

莫強求

命裡有時終須有,命裡無時莫強求。

在QDateTimeEdit使用過程中,分享瞭如何顯示日曆。而日曆是對應的是QDate,而非QTime。所以QDateEdit、QDateTimeEdit可以使用,而QTimeEdit並不能使用。

QDateTimeEdit *dateTimeEdit = new QDateTimeEdit(this);
QDateEdit *dateEdit = new QDateEdit(this);
QTimeEdit *timeEdit = new QTimeEdit(this);

dateTimeEdit->setCalendarPopup(true);  // 正確
dateEdit->setCalendarPopup(true);  // 正確
timeEdit->setCalendarPopup(true);  // 錯誤(語法正確)

對於QTimeEdit來說,雖然語法上可以通過,但是其實做了無用功,純屬冗餘程式碼,毫無意義!

寫程式碼時,有些人喜歡各種亂試,可以就Ok,不可以就拉倒。這種心態不可取,更多時候需要做到知其然,並知其所以然!

更多參考

相關文章