QT 输入框输入限制 正则表达式限制 整理
在使用 输入数值时,经常遇到限制其范围的需要,比如角太阳高度角范围为[-90,90],经度值范围[-180,180],方位角范围[0,360]。Qt提供了QIntValidator和QDoubleValidator可以限定数值输入范围,如使用QIntValidator限制整数的数值范围:
1.只允许输入字母和汉字:
QRegExp regExp;
regExp.setPattern("[a-zA-Z0-9_\u4e00-\u9fa5\w]+$");
QValidator *
editName = new QRegExpValidator(regExp,ui->lineEdit);
ui->lineEdit->setValidator(editName);
ui->lineEdit->setMaxLength(10);
2.正则表达式限制 只允许输入 浮点数
QRegExp
rx("^(-?[0]|-?1-9{0,5})(?:\.\d{1,4})?$|(^\\t?$)");
3.使用正则表达式限制只能输入数字
QRegExp
rx("[0-9.]+$");
QRegExpValidator *validator = new QRegExpValidator(rx, this);
ui->lineEdit->setValidator(validator);
4.使用正则表达式限制只能输入IP地址
QRegExp rx =
QRegExp("((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){4}");
QRegExpValidator *validator = new
QRegExpValidator(rx, this); ui->lineEdit->setValidator(validator);
ui->lineEdit->setInputMask("000.000.000.000");
- 限制 输入 值范围,此类直接限制不接收数字以外的输入,setRange设置接收范围
QDoubleValidator * pDouVld = new QDoubleValidator(this);
pDouVld->setRange(0,1000000000000000000);
ui->lePort->setValidator(pDouVld);
6.只要字符数字
QRegExpValidator validator2 = new QRegExpValidator(QRegExp("[A-Za-z0-9]"), this);
ui->leId->setValidator(validator2);
7.整理常用 正则表达式
^(-?[0]|-?1-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})?)$
- 式子中开头的^和结尾的$限定字符串的开始和结尾;
- "-?" 表示一个或0个负号,这里面的问号表示其前面的字符重复0次或1次;
- 管道符“|”表示平行分组,比如后三个,表示180或其它形式;
- [1-9] 表示限定数字范围为1到9,其余类似,如果是有限几个值,还可以用枚举的方式,比如限定-255到255时,第一个数字2的限定,应该表达为[1,2],这表示这个位置只允许是1或者2;
- "\d"是一个转义字符,表示匹配一位数字;
- “.” 表示匹配小数点;
- "\d+",这里面的+表示其前面的\d重复一次或多次;
- "\d{1,4}",里面的{1,4}表示重复1到4次;