Qt中時鐘時間功能QTime詳解
QTime提供了時鐘時間功能,記錄從午夜開始的時、分、秒、毫秒數,並提供比較和操作時間的功能。下面結合原始碼介紹QTime類,為便於理解QTime的實現,下面程式碼均做適當的簡化。
在QTime內部用一個int型私有變數mds來記錄時間資訊,即將時間轉換為毫秒數來儲存。QTime有兩個建構函式,預設的無參建構函式為QTime() : mds(NullTime){},將mds置為NullTime,以標誌為該物件在進一步設定時間前(setHMS())為空物件,而NullTime為QTime的一個私有列舉變數enum{NullTime = -1},所有QTime內部使用mds是否被置為-1來標誌物件是否為空物件,並且可以用isNull()函式可以檢查當前物件是否為空物件。而另一個引數建構函式為:
QTime(int h, int m, int s, int ms){ setHMS(h, m, s, ms); }
也就是進一步呼叫了時間的設定函式setHMS(),而所謂的時間設定函式其實很簡單,就是將引數時、分、秒、毫秒均轉換為毫秒錶示,對於一天來說,也就24個小時,所以以毫秒錶示,最大的數字也就是86400000。
bool setHMS(int h, int m, int s, int ms){
//檢查引數(略)
mds = (h*SECS_PER_HOUR + M*SECS_PER_MIN + S)*1000 + ms;
return true;
}
SECS_PER_HOUR-3600,SECS_PER_MIN-60,這兩個巨集應該很顯然。setHMS()必須接受合格的引數,否則不會定義得到有效的時間物件,可以用isValid()函式檢查該物件的有效性。作為私有變數mds,還有一個私有成員ds(),它的功能就是返回mds的值,但是它在返回前做了一個小小的判斷,即如果mds為空的話,它不返回-1(NullTime),而是返回0。
當然,有了mds的毫秒形式記錄的時間,我們很容易換算出時、分、秒、毫秒各自的數值,也就是當我們顯式的呼叫hour(), minute(), second(), msec()時都由mds做了進一步的換算。既然統一都用毫秒數來表示,那所有的時間比較操作符就很容易理解了,純粹是兩個int型大小之間的比較。
QTime有幾個靜態函式,currentTime()可以用當前時間來定義一個時鐘時間物件,fromString()可以根據一個字串定義一個時鐘時間物件。
另外介紹一下start(), restart(), elapsed()方法:
void QTime::start(){ *this = currentTime(); } //呼叫start時即將該物件的時間更新為當前時間
int QTime::restart()
{
QTime t = currentTime();
int n = msecsTo(t);
if (n < 0) //如果穿過午夜,即增加24小時86100000毫秒( passed midnight)
n += 86400*1000;
*this = t;
return n;
}
int QTime::elapsed() const
{
int n = msecsTo(currentTime());
if (n < 0) // passed midnight
n += 86400 * 1000;
return n;
}
elapsed()所做的事情就是返回自上次start()或者restart()之後已經有多少毫秒飄過去了,這裡進行了簡單的比較,如果現在的時間(毫秒形式)比以前的小,說明肯定穿過一個午夜了,那就加上一個24小時即86400*1000毫秒,那穿過兩個午夜怎辦,抱歉,只管一個午夜。而restart() 返回的和elapsed()返回的東西是一樣的,但還做了start()的事情,即更新該時間物件儲存的時間毫秒數,類似於常用電子錶上計時器的分圈計時效果。
應該來說,QTime是一個很簡單的時鐘時間類,提供的方法也較為基礎,當然同時也很有效。
相關文章
- Qt QDate QTime顯示當前系統時間QT
- 《Qt5+QDate和QTime獲取當前系統日期和時間》QT
- Excel中時間戳轉換時間Excel時間戳
- 詳解 Qt 呼叫 DLL功能函式QT函式
- Qt時鐘介面、數字時鐘(12小時制24小時制切換、修改系統時間)QT
- php中時間戳PHP時間戳
- 例項QT程式 —— Qt自繪製小時鐘QT
- Qt 時間顯示QT
- QT時鐘控制元件顯示QT控制元件
- QT介面顯示實時時間QT
- 時間複雜度(詳解)時間複雜度
- QT學習 實時顯示時間QT
- Qt實時顯示系統時間QT
- QT獲取日期,時間,星期QT
- Qt:獲取日期和時間QT
- Qt獲取當前時間QT
- Qt 獲取當前時間QT
- Go各時間字串使用詳解Go字串
- JavaScript計算時間差詳解JavaScript
- linux時間函式詳解Linux函式
- python時間處理詳解Python
- Pandas中時間和日期處理
- mysql中時間日期格式化MySql
- MySql中時間和日期函式MySql函式
- SQL中時間的加減法SQL
- python獲取系統時間(時間函式詳解)Python函式
- 24時區,GMT,UTC,DST,CST時間詳解
- QT顯示當前日期時間QT
- QT版用QLCDnumber顯示時間QT
- Qt 獲取程式編譯時間QT編譯
- JavaScript自動更新時間效果詳解JavaScript
- 北斗GPS同步時鐘(授時系統)技術原理詳解
- SQL中時間函式總結(一)SQL函式
- win10系統中時鐘顯示黑色或不可見的解決方法Win10
- 轉:24時區,GMT,UTC,DST,CST時間詳解
- NTP時間同步伺服器(區域網時鐘同步)解決方案伺服器
- js預設一個月時間差的時間段效果詳解JS
- QT入門系列(7):獲取系統時間 日期時間格式QT