编程爱好者联盟 2016-11-18
本例程用来展示 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