本文翻译自QT官方文档
该教程是数字时钟的一个示例,它会向你展示如何使用QLCDnumber去显示LCD一样的数字。
这个例子同样展示了如何用QTimer在固定间隔更新一个widget。
DigitalClock类定义
该DigitalClock类提供了一个时钟widget,用它来显示以闪烁的冒号为分隔的时间。我们继承QLCDNumber类和实现一个叫showTim()的私用插槽来更新时钟的显示:
class DigitalClock : public QLCDNumber
{
Q_OBJECT
public:
DigitalClock(QWidget *parent = 0); //构造函数
private slots:
void showTime(); //显示时间
};
DigitalClock类的实现:
DigitalClock::DigitalClock(QWidget *parent)
: QLCDNumber(parent)
{
setSegmentStyle(Filled); //显示样式,继承于QLCDNumber
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(showTime())); //建立计时器和显示函数的关联
timer->start(1000); //timeout的发射间隔
showTime();
setWindowTitle(tr("Digital Clock")); //widget的标题
resize(150, 60); //窗口大小
}
在构造函数中,我们首先改变LCD数字的样式。QLCDNumber::Filled 样式产生raised segments填充前景色(通常是黑色)。我们还设立了间隔为1秒的计时器来检测当前的时间,我们将计时器的timeout()信号连接到专用的showTime()插槽,这使得显示每秒更新一次。然后,我们调用showTime()插槽; 如果没有这个调用的话,在时间显示前将会有一秒钟的延迟启动时间。
void DigitalClock::showTime()
{
QTime time = QTime::currentTime(); //当前时间
QString text = time.toString("hh:mm");
if ((time.second() % 2) == 0) //冒号每两秒闪烁一次
text[2] = ' ';
display(text); //LCDNumber显示函数
}
每当时钟显示需要更新时,showTime()槽就会被调用。当前时间会被转换成“HH:MM”的字符串格式。当QTime::second()是偶数时,则该冒号被替换为空字符串。这使得冒号每隔一秒出现和消失。
最后,我们调用QLCDNumber::display()函数去更新widget.
#include <QApplication>
#include "digitalclock.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
DigitalClock clock;
clock.show();
return app.exec();
}
main函数,创建DigitalClock的对象,进行显示。