QLineEdit输入框有时要做限制输入的内容,如只输入数据。上面提供的两个类在使用时,setRange不生效。网上方法有两种,一个是重写validate函数,一个是使用正则表达式。
这里记录下使用正则表达式
先简要解释下正则表达式的含义:
^: 匹配字符串的开始。
$: 匹配字符串的结束。
\d: 匹配数字。注意:在C++中要对\转义,即\d用代码表示为\\d
. :匹配除换行符以外的任意字符。
{n}:重复n次。
{n, m}:重复至少n次,至多m次。
?: 重复零次或一次。
[0-9]:0到9数字中的任意一个数字。
[A-Z]:A到Z字母中的任意一个字母。
[a-z]:a到z字母中的任意一个字母。
| :或。可以把不同的子表达式合成一个总表达式
以限制输入0-50的正整数为例,具体代码如下:
auto reg = QRegularExpression("^([1-4][0-9]?|50 |[5-9] | 0)$");
auto pValidator = new QRegularExpressionValidator(this);
pValidator->setRegularExpression(reg);
ui.lineEdit->setValidator(pValidator);
[1-4][0-9]?:如果?匹配的是0次。则表示输入的数值为1、2、3、4;如果?匹配的是1次,则输入的数值为[10, 49]闭区间的任意整数值。
[5-9] :表示匹配输入数值为5、6、7、8、9。
50:表示匹配50。
0:表示匹配0。
然后通过|组合,就表示匹配[0, 50]区间的任意整数值。
上面是其他博主写的,我这里要输入正负数
例一:输入浮点数,小数点后三位
"^(-?[0-9]*\\.[0-9]{3})$"
参考链接