文章目录
- [LCD Number](#LCD Number)
-
- [1. 介绍](#1. 介绍)
- [2. 核心属性](#2. 核心属性)
- [3 . 代码实现:倒计时](#3 . 代码实现:倒计时)
-
- [1. 在界⾯上创建⼀个 QLCDNumber , 初始值设为 10.](#1. 在界⾯上创建⼀个 QLCDNumber , 初始值设为 10.)
- [2. 修改 widget.h 代码, 创建⼀个 QTimer 成员, 和⼀个 updateTime 函数](#2. 修改 widget.h 代码, 创建⼀个 QTimer 成员, 和⼀个 updateTime 函数)
- [3. 修改 widget.cpp, 在构造函数中初始化 QTimer](#3. 修改 widget.cpp, 在构造函数中初始化 QTimer)
- [4. 修改 widget.cpp, 实现 updateTime](#4. 修改 widget.cpp, 实现 updateTime)
- [4. 动画展示](#4. 动画展示)
LCD Number
1. 介绍
在Qt中,QLCDNumber
是一个用于显示数字的控件,它模仿了传统的LCD(液晶显示器)显示方式。QLCDNumber 通常用于显示数字信息,如计时器、计数器或其他数值数据。
2. 核心属性
属性 | 说明 |
---|---|
intValue | QLCDNumber 显⽰的数字值(int) |
value | QLCDNumber 显⽰的数字值(double)和 intValue 是联动的. 例如给 value 设为 3.5, intValue 的值就是 4. |
digitCount | 显⽰⼏位数字 |
mode | 数字显⽰形式 1. QLCDNumber::Dec :⼗进制模式,显⽰常规的⼗进制数字 2. QLCDNumber::Hex :⼗六进制模式,以⼗六进制格式显⽰数字。 3. QLCDNumber::Bin :⼆进制模式,以⼆进制格式显⽰数字。 4. QLCDNumber::Oct :⼋进制模式,以⼋进制格式显⽰数字 只有⼗进制的时候才能显⽰⼩数点后的内容. |
segmentStyle | 设置显⽰⻛格. . 1. QLCDNumber::Flat :平⾯的显⽰⻛格,数字呈现在⼀个平坦的表⾯上。 2. QLCDNumber::Outline :轮廓显⽰⻛格,数字具有清晰的轮廓和阴影效果。 3. QLCDNumber::Filled :填充显⽰⻛格,数字被填充颜⾊并与背景区分开。 |
smallDecimalPoint | 设置⽐较⼩的 ⼩数点. |
3 . 代码实现:倒计时
1. 在界⾯上创建⼀个 QLCDNumber , 初始值设为 10.

2. 修改 widget.h 代码, 创建⼀个 QTimer 成员, 和⼀个 updateTime 函数
cpp
QTimer* timer;
void updateTime();
3. 修改 widget.cpp, 在构造函数中初始化 QTimer
• QTimer 表⽰定时器. 通过 start ⽅法启动定时器之后, 就会每隔⼀定周期, 触发⼀次
QTimer::timeout 信号.
• 使⽤ connect 把 QTimer::timeout 信号和 Widget::updateTime 连接起来, 意味着每
次触发 QTimer::timeout 都会执⾏ Widget::updateTime
cpp
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 创建 QTimer 实例
timer = new QTimer(this);
// 连接信号槽. QTimer 会每隔⼀定的时间触发⼀个 timeout 信号. 现在把 timeout 信号
和 updateTime 连接起来.
// 此时意味着每次触发 timeout 信号都会伴随 updateTime 函数的执⾏.
connect(timer, &QTimer::timeout, this, &Widget::updateTime);
// 启动 QTimer, 并且规定每隔 1000ms 触发⼀次 timeout 信号.
timer->start(1000);
}
4. 修改 widget.cpp, 实现 updateTime
• 通过 intValue 获取到 QLCDNumber 内部的数值.
• 如果 value 的值归 0 了, 就停⽌ QTimer . 接下来 QTimer 也就不会触发 timeout 信号了
cpp
void Widget::updateTime() {
qDebug() << "updateTime";
int value = ui->lcdNumber->intValue();
if (value <= 0) {
// 如果时间到, 停⽌定时器.
timer->stop();
return;
}
ui->lcdNumber->display(value - 1);
}
- 代码总结
widget.h
cpp
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimer>
#include <QDebug>
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
void updateTime();
Ui::Widget *ui;
QTimer* timer;
};
#endif // WIDGET_H
widget.cpp
cpp
#include "widget.h"
#include "./ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->lcdNumber->display(10);
// 创建 QTimer 实例
timer = new QTimer(this);
// 连接信号槽. QTimer 会每隔⼀定的时间触发⼀个 timeout 信号. 现在把 timeout 信号
//和 updateTime 连接起来.
// 此时意味着每次触发 timeout 信号都会伴随 updateTime 函数的执⾏.
connect(timer, &QTimer::timeout, this, &Widget::updateTime);
// 启动 QTimer, 并且规定每隔 1000ms 触发⼀次 timeout 信号.
timer->start(1000);
}
Widget::~Widget()
{
delete ui;
}
void Widget::updateTime()
{
qDebug() << "updateTime";
int value = ui->lcdNumber->intValue();
if (value <= 0) {
// 如果时间到, 停⽌定时器.
timer->stop();
return;
}
ui->lcdNumber->display(value - 1);
}
4. 动画展示
