本例展示了 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

 

posted on 2016-11-18 18:42  飞鸢逐浪  阅读(2035)  评论(0编辑  收藏  举报