Qt 是一個跨平臺C++圖形界面開發庫,利用Qt可以快速開發跨平臺窗體應用程序,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現圖形化開發極大的方便了開發效率,本章將重點介紹QDateTime
日期與時間組件的常用方法及靈活運用。
在Qt中,日期和時間的處理通常使用 QDateTime
類。QDateTime
是一個用於表示日期和時間的類,而與之相關的組件還包括 QDate
、 QTime
以及QDateTime
,以下是對這些組件的詳細概述。
QDate
QDate
類用於表示日期,包括年、月和日。
主要特點如下:
- 構造函數:
QDate(int year, int month, int day)
,用於創建一個QDate
對象。 - 獲取日期信息: 提供了獲取年、月、日等日期信息的方法,例如
year()
、month()
、day()
。 - 比較日期: 可以進行日期的比較,判斷日期的先後順序。
- 日期格式: 可以以不同的格式輸出日期的字符串表示。
以下是 QDate
類的一些常用方法的說明和概述,以表格形式列出:
方法 | 描述 |
---|---|
QDate() |
默認構造函數,創建一個表示當前日期的 QDate 對象。 |
QDate(int year, int month, int day) |
構造函數,創建一個指定年、月、日的 QDate 對象。 |
isValid() |
檢查日期是否有效。 |
year() const |
返回年份。 |
month() const |
返回月份。 |
day() const |
返回日期。 |
toString(const QString &format) const |
返回日期的字符串表示,可以通過指定格式進行格式化。 |
currentDate() |
靜態函數,返回當前系統日期的 QDate 對象。 |
daysInMonth() |
返回當前月份的天數。 |
daysInYear() |
返回當前年份的天數。 |
addDays(int days) |
返回增加指定天數後的 QDate 對象。 |
addMonths(int months) |
返回增加指定月數後的 QDate 對象。 |
addYears(int years) |
返回增加指定年數後的 QDate 對象。 |
operator+(int days) |
重載加法運算符,返回增加指定天數後的 QDate 對象。 |
operator-(int days) |
重載減法運算符,返回減去指定天數後的 QDate 對象。 |
daysTo(const QDate &date) const |
返回到指定日期的天數差。 |
monthsTo(const QDate &date) const |
返回到指定日期的月數差。 |
yearsTo(const QDate &date) const |
返回到指定日期的年數差。 |
isValid() |
檢查日期是否有效。 |
這些方法提供了對 QDate
進行構造、獲取、比較、格式化和運算等操作的靈活性。你可以根據應用的需求使用這些方法,方便地處理日期相關的操作。
QTime
QTime
類用於表示時間,包括小時、分鐘、秒和毫秒。
主要特點如下:
- 構造函數:
QTime(int h, int m, int s, int ms = 0)
,用於創建一個QTime
對象。 - 獲取時間信息: 提供了獲取小時、分鐘、秒、毫秒等時間信息的方法,例如
hour()
、minute()
、second()
。 - 比較時間: 可以進行時間的比較,判斷時間的先後順序。
- 時間格式: 可以以不同的格式輸出時間的字符串表示。
以下是 QTime
類的一些常用方法的說明和概述,以表格形式列出:
方法 | 描述 |
---|---|
QTime() |
默認構造函數,創建一個表示當前時間的 QTime 對象。 |
QTime(int h, int m, int s, int ms = 0) |
構造函數,創建一個指定小時、分鐘、秒和毫秒的 QTime 對象。 |
isValid() |
檢查時間是否有效。 |
hour() const |
返回小時部分。 |
minute() const |
返回分鐘部分。 |
second() const |
返回秒部分。 |
msec() const |
返回毫秒部分。 |
toString(const QString &format) const |
返回時間的字符串表示,可以通過指定格式進行格式化。 |
currentTime() |
靜態函數,返回當前系統時間的 QTime 對象。 |
addSecs(int secs) |
返回增加指定秒數後的 QTime 對象。 |
addMSecs(int msecs) |
返回增加指定毫秒數後的 QTime 對象。 |
operator+(int secs) |
重載加法運算符,返回增加指定秒數後的 QTime 對象。 |
operator-(int secs) |
重載減法運算符,返回減去指定秒數後的 QTime 對象。 |
secsTo(const QTime &t) const |
返回到指定時間的秒數差。 |
msecsTo(const QTime &t) const |
返回到指定時間的毫秒數差。 |
isValid() |
檢查時間是否有效。 |
這些方法提供了對 QTime
進行構造、獲取、比較、格式化和運算等操作的靈活性。你可以根據應用的需求使用這些方法,方便地處理時間相關的操作。
QDateTime
QDateTime
類結合了日期和時間,用於表示日期和時間的組合。
主要特點如下:
- 構造函數:
QDateTime(QDate date, QTime time)
,用於創建一個QDateTime
對象。 - 獲取日期和時間信息: 提供了獲取年、月、日、小時、分鐘、秒等信息的方法。
- 比較日期和時間: 可以進行
QDateTime
對象的比較,判斷日期和時間的先後順序。 - 日期時間格式: 可以以不同的格式輸出日期和時間的字符串表示。
- 時區支持:
QDateTime
提供了對時區的支持,可以進行時區的設置和獲取。
以下是 QDateTime
類的一些常用方法的說明和概述,以表格形式列出:
方法 | 描述 |
---|---|
QDateTime() |
默認構造函數,創建一個表示當前日期和時間的 QDateTime 對象。 |
QDateTime(const QDate &date, const QTime &time) |
構造函數,創建一個由指定日期和時間組成的 QDateTime 對象。 |
isValid() |
檢查日期和時間是否有效。 |
date() const |
返回日期部分。 |
time() const |
返回時間部分。 |
toString(const QString &format) const |
返回日期和時間的字符串表示,可以通過指定格式進行格式化。 |
currentDateTime() |
靜態函數,返回當前系統日期和時間的 QDateTime 對象。 |
addDays(int days) |
返回增加指定天數後的 QDateTime 對象。 |
addMonths(int months) |
返回增加指定月數後的 QDateTime 對象。 |
addYears(int years) |
返回增加指定年數後的 QDateTime 對象。 |
addSecs(int secs) |
返回增加指定秒數後的 QDateTime 對象。 |
addMSecs(qint64 msecs) |
返回增加指定毫秒數後的 QDateTime 對象。 |
operator+(int secs) |
重載加法運算符,返回增加指定秒數後的 QDateTime 對象。 |
operator-(int secs) |
重載減法運算符,返回減去指定秒數後的 QDateTime 對象。 |
operator-(const QDateTime &dateTime) |
重載減法運算符,返回兩個日期時間對象之間的時間差。 |
secsTo(const QDateTime &dateTime) const |
返回到指定日期時間的秒數差。 |
msecsTo(const QDateTime &dateTime) const |
返回到指定日期時間的毫秒數差。 |
daysTo(const QDateTime &dateTime) const |
返回到指定日期時間的天數差。 |
monthsTo(const QDateTime &dateTime) const |
返回到指定日期時間的月數差。 |
yearsTo(const QDateTime &dateTime) const |
返回到指定日期時間的年數差。 |
toTime_t() |
將日期時間對象轉換爲自 1970-01-01 00:00:00 UTC 以來的秒數。 |
fromTime_t(uint seconds) |
從自 1970-01-01 00:00:00 UTC 以來的秒數創建日期時間對象。 |
這些方法提供了對 QDateTime
進行構造、獲取、比較、格式化和運算等操作的靈活性。你可以根據應用的需求使用這些方法,方便地處理日期和時間相關的操作。
首先我們來繪製一個簡單的日期時間頁面,這裏需要注意頁面中的日期組件DateEdit
和TimeEdit
其長得很像之前文章中所提到的SpinBox
但其兩者是不同的,讀者應注意區分兩者的不同指出,如下圖所示;
首先如何獲取日期時間,點擊獲取日期按鈕時我們可以直接通過調用QDate::currentDate()
則可獲取到當前日期,同理點擊獲取時間按鈕則直接調用QTime::currentTime()
實現,左側三個按鈕的功能實現如下所示;
#include <QDate>
#include <QTime>
#include <QDateTime>
#include <iostream>
// 設置日期組件
void MainWindow::on_pushButton_getdate_clicked()
{
QDate curDate = QDate::currentDate();
int year = curDate.year();
int month = curDate.month();
int day = curDate.day();
ui->dateEdit->setDate(curDate);
std::cout << year << "/" << month << "/" << day << std::endl;
}
// 設置時間組件
void MainWindow::on_pushButton_gettime_clicked()
{
QTime curTime = QTime::currentTime();
int hour = curTime.hour();
int minute = curTime.minute();
int second = curTime.second();
ui->timeEdit->setTime(curTime);
std::cout << hour << "/" << minute << "/" << second << std::endl;
}
// 設置日期時間
void MainWindow::on_pushButton_getdatetime_clicked()
{
QDateTime curDateTime = QDateTime::currentDateTime();
int yearDT = curDateTime.date().year();
int monthDT = curDateTime.date().month();
int dayDT = curDateTime.date().day();
int hourDT = curDateTime.time().hour();
int minuteDT = curDateTime.time().minute();
int secondDT = curDateTime.time().second();
ui->dateTimeEdit->setDateTime(curDateTime);
std::cout << yearDT << "/" << monthDT << "/" << dayDT << std::endl;
std::cout << hourDT << "/" << minuteDT << "/" << secondDT << std::endl;
}
接着我們來實現時間日期組件與字符串之間的轉換,當我們需要將字符串轉換爲日期時可以通過QDateTime::fromString
並根據字符串規律對其進行格式化,同理通過使用curDateTime.toString
即可實現日期時間轉換爲字符串。
// 將字符串轉爲日期
void MainWindow::on_pushButton_stod_clicked()
{
// 獲取字符串
QString datestr = ui->lineEdit->text();
datestr = datestr.trimmed();
// 是否爲空
if(!datestr.isEmpty())
{
// 格式化
QDateTime datetime = QDateTime::fromString(datestr,"yyyy-MM-dd hh:mm:ss");
// 設置到日期組件上
ui->dateTimeEdit_convert->setDateTime(datetime);
}
}
// 將日期轉換爲字符串
void MainWindow::on_pushButton_dtos_clicked()
{
QDateTime curDateTime = QDateTime::currentDateTime();
ui->dateTimeEdit_convert->setDateTime(curDateTime);
ui->lineEdit->setText(curDateTime.toString("yyyy-MM-dd hh:mm:ss"));
}
程序運行效果如下圖所示,讀者可通過點擊不同的按鈕來實現不同的功能;
爲了能更加充分的認識時間日期組件,此處我們將通過LCD Number
組件實現一個簡單的鐘表,QLCDNumber
是 Qt 中用於顯示數字的小部件,通常用於顯示整數或浮點數值。它提供了一個類似於數字顯示器或儀表板的外觀,可以用於顯示各種數值信息。
顯示器的使用非常容易,只需要setDigitCount()
設置顯示長度,並通過setDecMode()
設置爲十進制輸出模式,最後調用display()
就可以將一個整數刷新到屏幕上,完整代碼如下所示;
#include <QTime>
#include <QTimer>
// 全局定時器變量指針
QTimer *my_timer;
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 聲明定時器
my_timer = new QTimer(this);
// 綁定一個匿名函數
connect(my_timer,&QTimer::timeout,[=]{
// 獲取時間
QTime curTime = QTime::currentTime();
int hour = curTime.hour();
int minute = curTime.minute();
int second = curTime.second();
// 設置LCD屏幕2位顯示
ui->lcdNumber_hour->setDigitCount(2);
ui->lcdNumber_minute->setDigitCount(2);
ui->lcdNumber_hour->setDigitCount(2);
// 使用十進制
ui->lcdNumber_hour->setDecMode();
ui->lcdNumber_minute->setDecMode();
ui->lcdNumber_second->setDecMode();
// 刷新參數
ui->lcdNumber_hour->display(hour);
ui->lcdNumber_minute->display(minute);
ui->lcdNumber_second->display(second);
});
// 啓動定時器1000毫秒執行依次
my_timer->start(1000);
}
MainWindow::~MainWindow()
{
delete ui;
}
讀者可自行編譯運行這段程序,則會看到每隔一秒計時器都會向前遞增以爲,如下圖所示;