4. QLineEdit 输入与校验
任务目标
实现一个包含QLineEdit输入框的Qt窗口,使用QValidator(正则表达式验证器)限制输入内容为数字(含整数和小数),并在输入过程中实时显示校验结果(合法/非法)。
环境依赖
- Qt 5.15+(或Qt 6.x)
- 编译器:支持C++11或更高版本
- 构建工具:qmake或CMake(本案例使用qmake)
完整实现
创建一个QWidget窗口,包含一个QLineEdit用于输入,一个QLabel用于显示校验状态。使用QRegularExpressionValidator限制输入为数字(支持正负号和小数点),并通过textChanged信号实时判断当前输入是否合法。
// main.cpp
#include <QApplication>
#include <QWidget>
#include <QVBoxLayout>
#include <QLineEdit>
#include <QLabel>
#include <QRegularExpressionValidator>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
window.setWindowTitle("QLineEdit 数字输入校验");
QVBoxLayout *layout = new QVBoxLayout(&window);
QLineEdit *lineEdit = new QLineEdit;
lineEdit->setPlaceholderText("请输入数字(支持小数和负数)");
// 正则:可选正负号 + 整数部分 + 可选小数部分
QRegularExpression regex("^-?\\d+(\\.\\d+)?$");
QRegularExpressionValidator *validator = new QRegularExpressionValidator(regex, lineEdit);
lineEdit->setValidator(validator);
QLabel *statusLabel = new QLabel("等待输入");
statusLabel->setStyleSheet("font-weight: bold;");
layout->addWidget(lineEdit);
layout->addWidget(statusLabel);
// 实时校验:输入变化时判断当前文本是否完全匹配正则
QObject::connect(lineEdit, &QLineEdit::textChanged, [&](const QString &text) {
QRegularExpression fullMatch("^-?\\d+(\\.\\d+)?$");
if (text.isEmpty()) {
statusLabel->setText("等待输入");
statusLabel->setStyleSheet("color: gray; font-weight: bold;");
} else if (fullMatch.match(text).hasMatch()) {
statusLabel->setText("✓ 合法数字");
statusLabel->setStyleSheet("color: green; font-weight: bold;");
} else {
statusLabel->setText("✗ 非法输入(仅允许数字、小数点、负号)");
statusLabel->setStyleSheet("color: red; font-weight: bold;");
}
});
window.resize(400, 120);
window.show();
return app.exec();
}
工程文件
# ValidatorDemo.pro
QT += core gui widgets
TARGET = ValidatorDemo
TEMPLATE = app
SOURCES += main.cpp
运行方式
qmake ValidatorDemo.pro
make
./ValidatorDemo # Windows下为 ValidatorDemo.exe
验证方法
- 合法输入:输入
123、-45.6、0.5,状态标签显示绿色“✓ 合法数字”。 - 非法输入:输入
abc、12a、3.4.5,状态标签显示红色“✗ 非法输入”。 - 边界行为:由于设置了validator,非法字符(如字母)会被直接阻止输入;但像
12a这类中间状态(先输入12再输入a)中,a会被拦截,因此实际无法形成非法文本。若想观察非法状态,可输入-或.开头的临时状态(如单独输入-),此时正则不匹配,标签显示红色提示。
通过标准:程序可编译运行;输入框只能输入数字、负号和小数点;当输入内容符合数字格式时显示绿色合法提示,否则显示红色非法提示。