計時器
首先上圖
界面構建主要是lcdnumber 和textbrowser
首先實現計時功能,要用到QTime類。
QTime類
基礎函數
QTime(int h, int m, int s = 0, int ms = 0)//構造函數
QTime addMSecs(int ms) const //對時間進行增改當然還要相應的addSec函數
int hour() const //得到當前時間的小時,同理還有minute,second,msec
int elapsed() const //返回從暫停到重新開始流逝的時間
int restart()和void start() //重新開始和開始,注意restart有流逝時間的返回值
int msecsTo(const QTime &t) const //比較兩個Qtime類的時間差值
靜態成員
QTime currentTime() //獲取當前時間
QTimer類(計時器)
基礎函數
void start(int msec) //每多少毫秒發送一次信號
void stop() //停止發送信號
信號
void timeout() //當休息時間結束時發送該信號
使用
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));//update()是你想要調用的函數,當然也不一定是非要this接受
timer->start(1000);
實際上窗口的反覆更新就是調用的Qtimer中的exec()函數來維持。但是反覆更新帶來了巨大的任務量,期待用線程的方式來解決(以後再談)。
計時器分爲精確型和粗糙型,但是無論是哪種計時器都依賴於它的操作系統和硬件性能。如果系統過忙不能保證計時器所有求的準確性,那麼無論是哪種計時器都會發生偏差。
窗口的介紹
- LCDnumber:需要強調的是它無法獲取顯示的文本,如果的確需要文本,可以將它的display()函數連接一個槽函數。可以用來顯示Qstring
- textbrowser:富文本編輯框,只讀不可編輯。textedit類沒有富文本可以編輯
功能的實現
- 點擊開始鍵,它要能開始計時。那麼我在Mainwindow的構造函數中建一個Qtime對象,來記錄開始鍵按下瞬間計算機當前時間。當我按下暫停或者停止的時候再建立一個Qtime的對象,兩個對象比較差值,差值即爲記錄的時間。
- 因爲我做的LCD實時展示,剛開始要對LCD初始化
this->ui->lcdNumber->display("00:00:00:000");
再在Mainwindow構造函數中寫一個Qtimer的對象,讓LCD每毫秒更新一下時間。 - 更改一下按鍵上的bug:比如按下停止時不能暫停。
- 將打點的數據展示到textbrowser只需要appendText()(追加)。
- 停止時應該有一個清除鍵將所有打點記錄清空並將LCD置零
- 暫停時暫停時間應該被剔除出去