DigitalClockclass provides a clock widget showing the time with hours and minutes separated by a blinking colon. We subclassQLCDNumberand implement a private slot calledshowTime()to update the clock display:class DigitalClock : public QLCDNumber { Q_OBJECT public: DigitalClock(QWidget *parent = nullptr); private slots: void showTime(); };
DigitalClock::DigitalClock(QWidget *parent) : QLCDNumber(parent) { setSegmentStyle(Filled); QTimer *timer = new QTimer(this); connect(timer, &QTimer::timeout, this, &DigitalClock::showTime); timer->start(1000); showTime(); setWindowTitle(tr("Digital Clock")); resize(150, 60); }In the constructor, we first change the look of the LCD numbers. The
Filledstyle produces raised segments filled with the foreground color (typically black). We also set up a one-second timer to keep track of the current time, and we connect itstimeout()signal to the privateshowTime()slot so that the display is updated every second. Then, we call theshowTime()slot; without this call, there would be a one-second delay at startup before the time is shown.void DigitalClock::showTime() { QTime time = QTime::currentTime(); QString text = time.toString("hh:mm"); if ((time.second() % 2) == 0) text[2] = ' '; display(text); }
showTime()slot is called whenever the clock display needs to be updated.The current time is converted into a string with the format “hh:mm”. When
second()is a even number, the colon in the string is replaced with a space. This makes the colon appear and vanish every other second.最后,调用
display()to update the widget.