2020年7月27日 星期一

DateTimeEdit 的基本應用

DateTimeEdit 的基本應用

前言

  在應用程式中有時會需要日期與時間的輸入, Qt 提供了 DateTimeEdit 來解決輸入日期與時間,在此把學習的過程做個紀錄。

內容

  先到 [ GitLab ] HelloQt 下載範例,這次應用的專案路徑
(HelloQt' directory)/DateTimeEdit/Basic,在 Qt Creator 開啟設計介面會看到以下
範例的設計介面

圖中左側有 DateTimeEdit 在工具箱的位置,執行結果如下
範例的執行結果


範例會有兩個 DateTimeEdit ,上方使用 12 小時的方式來顯示,下方使用 24 小時的方式來顯示,可以透過 DateTimeEdit  的屬性來改變, DateTimeEdit  的屬性如下圖
DateTimeEdit 的屬性

如圖所標示的"displayFormat",透過改變該屬性就可以改變顯示的格式,顯示格式可參考下圖
官方網站的格式說明截圖

接著看程式的操作,看到 MainWindow::MainWindow() ,程式碼如下
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
  ui->setupUi(this);
  //
  connect( ui->dateTimeEdit1 , &QDateTimeEdit::dateTimeChanged , this , &MainWindow::onDateTimeEdit1dateTimeChanged );
  connect( ui->dateTimeEdit2 , &QDateTimeEdit::dateTimeChanged , this , &MainWindow::onDateTimeEdit2dateTimeChanged );

  //
  ui->dateTimeEdit1->setDate( QDate( 2020 , 6 , 6 ) );
  ui->dateTimeEdit1->setTime( QTime( 18 , 30 ) );
}

程式的開頭對兩個 DateTimeEdit 做事件綁定,接著會對上方的 DateTimeEdit 直接對 Date (日期) 與 time (時間) 做輸入,分別透過 setDate() 與 setTime() ,參數很直覺就不多做說明,事件的程式碼如下
void MainWindow::onDateTimeEdit1dateTimeChanged(const QDateTime &datetime)
{
  int y,m,d;
  ui->dateTimeEdit1->date().getDate(&y,&m,&d);
  qDebug( "New dateTimeEdit1's date:%ld_%ld_%ld" , y , m , d);
  //
  qDebug( "New dateTimeEdit1's time:%ld_%ld_%ld" ,
    ui->dateTimeEdit1->time().hour(),
    ui->dateTimeEdit1->time().minute(),
    ui->dateTimeEdit1->time().second() );

}

void MainWindow::onDateTimeEdit2dateTimeChanged(const QDateTime &datetime)
{
  int y,m,d;
  ui->dateTimeEdit2->date().getDate(&y,&m,&d);
  qDebug( "New dateTimeEdit2's date:%ld_%ld_%ld" , y , m , d);
  //
  qDebug( "New dateTimeEdit2's time:%ld_%ld_%ld" ,
    ui->dateTimeEdit2->time().hour(),
    ui->dateTimeEdit2->time().minute(),
    ui->dateTimeEdit2->time().second() );

}

取得 date 是透過 getDate() 來取得,不過也可以透過 year() 、 month() 與 day() 來個別取得,time 的取得分別透過 hour() 、 minute() 與 second() 來取得,要注意 hour() 內定是 24 小時不管顯示模式是否為 12 小時顯示或是 24 小時顯示。

參考資料

[ doc.qt.io ] QDateTimeEdit Class

相關文章與資料

[ GitLab ] HelloQt

沒有留言:

張貼留言