[180511]基於QTime類和QTimer類實現的計時器

計時器

首先上圖
[180511]基於QTime類和QTimer類實現的計時器
界面構建主要是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()函數來維持。但是反覆更新帶來了巨大的任務量,期待用線程的方式來解決(以後再談)。
計時器分爲精確型和粗糙型,但是無論是哪種計時器都依賴於它的操作系統和硬件性能。如果系統過忙不能保證計時器所有求的準確性,那麼無論是哪種計時器都會發生偏差。


窗口的介紹

  1. LCDnumber:需要強調的是它無法獲取顯示的文本,如果的確需要文本,可以將它的display()函數連接一個槽函數。可以用來顯示Qstring
  2. textbrowser:富文本編輯框,只讀不可編輯。textedit類沒有富文本可以編輯

功能的實現

  • 點擊開始鍵,它要能開始計時。那麼我在Mainwindow的構造函數中建一個Qtime對象,來記錄開始鍵按下瞬間計算機當前時間。當我按下暫停或者停止的時候再建立一個Qtime的對象,兩個對象比較差值,差值即爲記錄的時間。
  • 因爲我做的LCD實時展示,剛開始要對LCD初始化
    this->ui->lcdNumber->display("00:00:00:000");
    再在Mainwindow構造函數中寫一個Qtimer的對象,讓LCD每毫秒更新一下時間。
  • 更改一下按鍵上的bug:比如按下停止時不能暫停。
  • 將打點的數據展示到textbrowser只需要appendText()(追加)。
  • 停止時應該有一個清除鍵將所有打點記錄清空並將LCD置零
  • 暫停時暫停時間應該被剔除出去
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章