限制QLineEdit的数值输入范围

本文介绍如何使用Qt的QIntValidator、QDoubleValidator和QRegExpValidator来限制QLineEdit中的数值输入范围,包括整数和浮点数,并通过正则表达式实现更精细的控制。
        在使用QLineEdit输入数值时,经常遇到限制其范围的需要,比如角太阳高度角范围为[-90,90],经度值范围[-180,180],方位角范围[0,360]。Qt提供了QIntValidator和QDoubleValidator可以限定数值输入范围,如使用QIntValidator限制整数的数值范围:

例1:

lineEdit->setValidator(new QIntValidator(0, 1000, this));
例2:
lineEdit->setValidator(new QDoubleValidator(-180.0,180.0,6,this));

        对于浮点数,使用QDoubleValidator时,发现只能限制只输入小数,但是无法设定数值范围,因此有必要对这个问题做一番研究。

        除了QIntValidator和QDoubleValidator,Qt提供另一种校验器是正则表达式校验器:QRegExpValidator,下面是一些常用的利用正则表达式校验器限定数值范围的用法:

限制浮点数输入范围为[-999999.9999,999999.9999] 

QRegExp rx("^(-?[0]|-?[1-9][0-9]{0,5})(?:\\.\\d{1,4})?$|(^\\t?$)");
QRegExpValidator *pReg = new QRegExpValidator(rx, this);
lineEdit->setValidator(pReg);
限制浮点数输入范围为[-180,180]

QRegExp rx("(^-?180$)|(^-?1[0-7]\\d$)|(^-?[1-9]\\d$)|(^-?[1-9]$)|^0$");
QRegExpValidator *pReg = new QRegExpValidator(rx, this);
lineEdit->setValidator(pReg);

限制浮点数输入范围为[-180,180]

QRegExp rx("^-?(180|1?[0-7]?\\d(\\.\\d+)?)$");
QRegExpValidator *pReg = new QRegExpValidator(rx, this);
lineEdit->setValidator(pReg);
限制浮点数输入范围为[-180,180]并限定为小数位后4位
QRegExp rx("^-?(180|1?[0-7]?\\d(\\.\\d{1,4})?)$");
QRegExpValidator *pReg = new QRegExpValidator(rx, this);
lineEdit->setValidator(pReg);
限制浮点数输入范围为[-90,90]并限定为小数位后4位
QRegExp rx("^-?(90|[1-8]?\\d(\\.\\d{1,4})?)$");
QRegExpValidator *pReg = new QRegExpValidator(rx, this);
lineEdit->setValidator(pReg);


简单说明一下这几个正则表达式:

^(-?[0]|-?[1-9][0-9]{0,5})(?:\.\d{1,4})?$|(^\t?$)

(^-?180$)|(^-?1[0-7]\d$)|(^-?[1-9]\d$)|(^-?[1-9]$)|^0$

^-?(180|1?[0-7]?\d(\.\d+)?)$

^-?(180|1?[0-7]?\d(\.\d{1,4})?)$

^-?(90|[1-8]?\d(\.\d{1,4})?)$

  1.  式子中开头的^和结尾的$限定字符串的开始和结尾;
  2.  "-?" 表示一个或0个负号,这里面的问号表示其前面的字符重复0次或1次;
  3.  管道符“|”表示平行分组,比如后三个,表示180或其它形式;
  4.  [1-9] 表示限定数字范围为1到9,其余类似,如果是有限几个值,还可以用枚举的方式,比如限定-255到255时,第一个数字2的限定,应该表达为[1,2],这表示这个位置只允许是1或者2;
  5.  "\d"是一个转义字符,表示匹配一位数字;
  6.  “\.” 表示匹配小数点;
  7.  "\d+",这里面的+表示其前面的\d重复一次或多次;
  8.  "\d{1,4}",里面的{1,4}表示重复1到4次;

有了以上知识,下面我们可以很快的写出限定[-255,255]的正则表达式:

[-255,255]整数:^-?(255|[1,2]?[0-4]?\d|[1,2]?5[0-4]?)$

[-255,255]小数:^-?(255|([1,2]?[0-4]?\d|[1,2]?5[0-4]?)(\.\d)?)$

参考:

[1]Qt限制文本框输入的方法

[2]怎么让QLineEdit中只能输入数字

[3]用正则表达式配出-180到180该怎么写

[4]求正则表达式,在-180到180之间的数字,包括浮点数


在 Qt Designer 中,可以通过设置 `QLineEdit` 控件的输入验证器(`QValidator`)来限制其仅接受数字输入。Qt 提供了内置的 `QIntValidator` 和 `QDoubleValidator` 类,分别用于限制整数和浮点数的输入[^1]。 ### 设置 QLineEdit 仅接受数字输入的方法 1. **使用 `QIntValidator` 限制输入为整数** - 在 Qt Designer 中选择目标 `QLineEdit` 控件。 - 在右侧的属性编辑器中找到 `validator` 属性。 - 点击下拉菜单,选择 `QIntValidator`。 - 设置 `bottom` 和 `top` 属性,定义允许输入的整数范围(例如 0 到 100)[^1]。 2. **使用 `QDoubleValidator` 限制输入为浮点数** - 同样选中目标 `QLineEdit` 控件。 - 将 `validator` 设置为 `QDoubleValidator`。 - 配置 `bottom`、`top` 和 `decimals` 属性,以控制数值范围和小数位数。 3. **通过代码设置(可选)** 如果希望通过代码动态设置验证器,可以在主窗口或对话框的构造函数中添加如下代码: ```cpp // 限制输入为整数 ui->m_editX->setValidator(new QIntValidator(0, 100, this)); // 或者限制输入为浮点数,最多两位小数 QDoubleValidator *validator = new QDoubleValidator(0.0, 100.0, 2, this); validator->setNotation(QDoubleValidator::StandardNotation); ui->m_editY->setValidator(validator); ``` 上述代码中,`m_editX` 和 `m_editY` 是 `QLineEdit` 的对象名,需与 UI 文件中定义的对象名一致。 4. **测试输入限制** 完成设置后,运行程序并尝试在 `QLineEdit` 中输入数字字符,系统将自动阻止无效输入或显示警告提示,具体行为取决于平台和验证器的实现。 ### 注意事项 - 在 Qt Designer 中直接设置验证器时,生成的 `.ui` 文件会自动包含相关配置,无需手动编写代码。 - 如果需要更复杂的输入限制(例如 IP 地址、正则表达式匹配),可以考虑使用 `QRegularExpressionValidator`。 - 验证器的设置对用户输入的合法性检查非常关键,有助于提升应用程序的健壮性和用户体验。 ---
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深蓝静音

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值