Qt 之 数字钟

  本例程用来展示 QTimer 的使用,如何定时的更新一个窗口部件。

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     ~DigitalClock();
10 
11 private slots:
12     void showTime();
13 };

  DigitalClock 继承自 QLCDNumber 类,#8 声明构造函数,#9 声明析构函数,#11~12 声明槽函数 showTime(),其中构造函数的实现如下:

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

  析构函数内容为空,槽函数 showTime() 中, #3 获取到当前时间后,#4 将其转换为 “hh:mm” 格式,#5 显示出时间。

void DigitalClock::showTime()
 {
     QTime time = QTime::currentTime();
     QString text = time.toString("hh:mm");
     display(text);
 }

  此时,程序可以显示数字时钟,但不是实时,只在第一次运行时获取当前的时间并显示出来。为了实时显示,则需要下面的 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(tr("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.7 | Qt Widgets | Digital Clock Example

相关推荐