Qt 之 數字鍾


  本例展示了 QTimer 的使用,如何定時更新一個窗口部件 DigitalClock

1  QLCDNumber 類

  QLCDNumber 是一種可將數字顯示為類似 LCD 形式的窗口部件,它同 QLabel 一樣,都繼承自 QFrame,而 QFrame 繼承自 QWidget

  頭文件 digitalclock.h

 1 #include <QLCDNumber>
 2 
 3 class DigitalClock : public QLCDNumber
 4 {
 5     Q_OBJECT
 6 
 7 public:
 8     DigitalClock(QWidget *parent = 0);
9 10 private slots: 11 void showTime(); 12 };

  DigitalClock 繼承自 QLCDNumber 類,對於需要信號和槽的類,#5 處的 Q_OBJECT 宏是必需的,#8 聲明構造函數,#10~11 聲明槽函數 showTime()

1.1  構造函數

 1 DigitalClock::DigitalClock(QWidget *parent)
 2     : QLCDNumber(parent)
 3 {
 4     setSegmentStyle(QLCDNumber::Filled);
 5 
 6     showTime();
 7 
 8     setWindowTitle("Digital Clock");
 9     resize(150, 60);
10 }

1.2  槽函數

   #3 獲取到當前時間后,#4 將其轉換為 “hh:mm” 格式,#5 顯示出時間。

1 void DigitalClock::showTime()
2 {
3     QTime time = QTime::currentTime();
4     QString text = time.toString("hh:mm");
5     display(text);
6 }

  此時,程序可以顯示數字時鍾,但不是實時,只在第一次運行時獲取當前的時間並顯示出來。為了實時顯示,則需要下面的 QTimer 類。

2  QTimer 類

  QTimer 類繼承自 QObject,可用來實時的更新時間。構造函數如下:#6 新建一個定時器,#7 利用 connect() 函數,連接信號 timeout() 和 槽函數 showTime(),#8 開啟定時器,並設置時間間隔為 1000 ms

 1 DigitalClock::DigitalClock(QWidget *parent)
 2     : QLCDNumber(parent)
 3 {
 4     setSegmentStyle(QLCDNumber::Filled);
 5 
 6     QTimer *timer = new QTimer(this);
 7     connect(timer, SIGNAL(timeout()), this, SLOT(showTime()));
 8     timer->start(1000);
 9 
10     showTime();
11     
12     setWindowTitle("Digital Clock");
13     resize(150, 60);
14 }

    最終的 showTime() 如下: #5 和 #6 通過取余運算,使得時鍾和分鍾之間的分號,每隔一秒就消失,從而實現閃爍功能

1 void DigitalClock::showTime()
2 {
3     QTime time = QTime::currentTime();
4     QString text = time.toString("hh:mm");
5     if((time.second() % 2) == 0)
6         text[2] = ' ';
7     display(text);
8 }

   界面如下:

  

 

參考資料

  Qt 助手,Qt 5.8 | Qt Widgets | Digital Clock Example

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM