数字时钟示例演示如何使用类似 LCD 的数字显示数字。
数字时钟示例的屏幕截图
此示例还演示了如何使用定期更新小组件。
数字时钟类定义
该类提供了一个时钟小部件,显示时间,小时和分钟之间用闪烁的冒号分隔。我们子类化并实现一个私有插槽,用于更新时钟显示:DigitalClock
showTime()
<span style="color:#404244"><span style="background-color:#3a4055"><span style="color:#ffffff"><span style="color:#ffff55">class</span> <span style="color:#4f9d08">DigitalClock</span> <span style="color:#ffffff">:</span> <span style="color:#ffff55">public</span> <a data-cke-saved-href="https://doc.qt.io/qt-6/qlcdnumber.html" href="https://doc.qt.io/qt-6/qlcdnumber.html"><span style="color:#21be2b">QLCDNumber</span></a>
<span style="color:#ffffff">{</span><span style="color:#ffffff">
Q_OBJECT
</span><span style="color:#ffff55">public</span><span style="color:#ffffff">:</span>
<span style="color:#4f9d08">DigitalClock</span><span style="color:#ffffff">(</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qwidget.html" href="https://doc.qt.io/qt-6/qwidget.html"><span style="color:#21be2b">QWidget</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">parent </span><span style="color:#ffffff">=</span> <span style="color:#ffff55">nullptr</span><span style="color:#ffffff">);</span>
<span style="color:#ffff55">private</span> <span style="color:#ffffff">slots</span><span style="color:#ffffff">:</span>
<span style="color:#ffff55">void</span><span style="color:#ffffff"> showTime</span><span style="color:#ffffff">();</span>
<span style="color:#ffffff">};</span></span></span></span>
数字时钟类实现
<span style="color:#404244"><span style="background-color:#3a4055"><span style="color:#ffffff"><span style="color:#4f9d08">DigitalClock</span><span style="color:#ffffff">::</span><span style="color:#4f9d08">DigitalClock</span><span style="color:#ffffff">(</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qwidget.html" href="https://doc.qt.io/qt-6/qwidget.html"><span style="color:#21be2b">QWidget</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">parent</span><span style="color:#ffffff">)</span>
<span style="color:#ffffff">:</span> <a data-cke-saved-href="https://doc.qt.io/qt-6/qlcdnumber.html" href="https://doc.qt.io/qt-6/qlcdnumber.html"><span style="color:#21be2b">QLCDNumber</span></a><span style="color:#ffffff">(</span><span style="color:#ffffff">parent</span><span style="color:#ffffff">)</span>
<span style="color:#ffffff">{</span><span style="color:#ffffff">
setSegmentStyle</span><span style="color:#ffffff">(</span><span style="color:#4f9d08">Filled</span><span style="color:#ffffff">);</span>
<a data-cke-saved-href="https://doc.qt.io/qt-6/qtimer.html" href="https://doc.qt.io/qt-6/qtimer.html"><span style="color:#21be2b">QTimer</span></a> <span style="color:#ffffff">*</span><span style="color:#ffffff">timer </span><span style="color:#ffffff">=</span> <span style="color:#ffff55">new</span> <a data-cke-saved-href="https://doc.qt.io/qt-6/qtimer.html" href="https://doc.qt.io/qt-6/qtimer.html"><span style="color:#21be2b">QTimer</span></a><span style="color:#ffffff">(</span><span style="color:#ffff55">this</span><span style="color:#ffffff">);</span><span style="color:#ffffff">
connect</span><span style="color:#ffffff">(</span><span style="color:#ffffff">timer</span><span style="color:#ffffff">,</span> <span style="color:#ffffff">&</span><a data-cke-saved-href="https://doc.qt.io/qt-6/qtimer.html" href="https://doc.qt.io/qt-6/qtimer.html"><span style="color:#21be2b">QTimer</span></a><span style="color:#ffffff">::</span><span style="color:#ffffff">timeout</span><span style="color:#ffffff">,</span> <span style="color:#ffff55">this</span><span style="color:#ffffff">,</span> <span style="color:#ffffff">&</span><span style="color:#4f9d08">DigitalClock</span><span style="color:#ffffff">::</span><span style="color:#ffffff">showTime</span><span style="color:#ffffff">);</span><span style="color:#ffffff">
timer</span><span style="color:#ffffff">-</span><span style="color:#ffffff">></span><span style="color:#ffffff">start</span><span style="color:#ffffff">(</span><span style="color:#ff55ff">1000</span><span style="color:#ffffff">);</span><span style="color:#ffffff">
showTime</span><span style="color:#ffffff">();</span><span style="color:#ffffff">
setWindowTitle</span><span style="color:#ffffff">(</span><span style="color:#ffffff">tr</span><span style="color:#ffffff">(</span><span style="color:#aaaaaa">"Digital Clock"</span><span style="color:#ffffff">));</span><span style="color:#ffffff">
resize</span><span style="color:#ffffff">(</span><span style="color:#ff55ff">150</span><span style="color:#ffffff">,</span> <span style="color:#ff55ff">60</span><span style="color:#ffffff">);</span>
<span style="color:#ffffff">}</span></span></span></span>
在构造函数中,我们首先更改 LCD 编号的外观。该样式生成用前景色(通常为黑色)填充的凸起段。我们还设置了一个一秒计时器来跟踪当前时间,并将其()信号连接到专用插槽,以便显示每秒更新一次。然后,我们调用插槽;如果没有此调用,在显示时间之前,启动时会有一秒钟的延迟。showTime()
showTime()
<span style="color:#404244"><span style="background-color:#3a4055"><span style="color:#ffffff"><span style="color:#ffff55">void</span> <span style="color:#4f9d08">DigitalClock</span><span style="color:#ffffff">::</span><span style="color:#ffffff">showTime</span><span style="color:#ffffff">()</span>
<span style="color:#ffffff">{</span>
<a data-cke-saved-href="https://doc.qt.io/qt-6/qtime.html" href="https://doc.qt.io/qt-6/qtime.html"><span style="color:#21be2b">QTime</span></a><span style="color:#ffffff"> time </span><span style="color:#ffffff">=</span> <a data-cke-saved-href="https://doc.qt.io/qt-6/qtime.html" href="https://doc.qt.io/qt-6/qtime.html"><span style="color:#21be2b">QTime</span></a><span style="color:#ffffff">::</span><span style="color:#ffffff">currentTime</span><span style="color:#ffffff">();</span>
<a data-cke-saved-href="https://doc.qt.io/qt-6/qstring.html" href="https://doc.qt.io/qt-6/qstring.html"><span style="color:#21be2b">QString</span></a><span style="color:#ffffff"> text </span><span style="color:#ffffff">=</span><span style="color:#ffffff"> time</span><span style="color:#ffffff">.</span><span style="color:#ffffff">toString</span><span style="color:#ffffff">(</span><span style="color:#aaaaaa">"hh:mm"</span><span style="color:#ffffff">);</span>
<span style="color:#ffff55">if</span> <span style="color:#ffffff">((</span><span style="color:#ffffff">time</span><span style="color:#ffffff">.</span><span style="color:#ffffff">second</span><span style="color:#ffffff">()</span> <span style="color:#ffffff">%</span> <span style="color:#ff55ff">2</span><span style="color:#ffffff">)</span> <span style="color:#ffffff">=</span><span style="color:#ffffff">=</span> <span style="color:#ff55ff">0</span><span style="color:#ffffff">)</span><span style="color:#ffffff">
text</span><span style="color:#ffffff">[</span><span style="color:#ff55ff">2</span><span style="color:#ffffff">]</span> <span style="color:#ffffff">=</span> <span style="color:#aaaaaa">' '</span><span style="color:#ffffff">;</span><span style="color:#ffffff">
display</span><span style="color:#ffffff">(</span><span style="color:#ffffff">text</span><span style="color:#ffffff">);</span>
<span style="color:#ffffff">}</span></span></span></span>
每当需要更新时钟显示时,都会调用该插槽。showTime()
当前时间将转换为格式为“hh:mm”的字符串。当 () 是偶数时,字符串中的冒号将替换为空格。这使得结肠每隔一秒出现和消失一次。
最后,我们调用 () 来更新小部件。
欢迎大家加入编程交流群
Qt编程交流群 57634222
C++编程交流群 910854771
编程交流群 241531722