限制QLineEdit的数值输入范围

2020-12-17 14:15:39  阅读 2692 次 评论 0 条

http://blog.csdn.net/haluoluo211/article/details/47017291


1.使用正则表达式检验QLineEdit的输入范围(代码如下):

#include <qvalidator.h>

#include <qlineedit.h>

 

QLineEdit *lineEdit = new QLineEdit(this);

QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}");   //^[1-9][0-9]*$ 和 ^[1-9]{1}[/d]*$    

                                            //上面的正则表达式表示只能输入大于0的正整数

lineEdit->setValidator(new QRegExpValidator(regExp, this));


#####或者用这个

QLineEdit只输入字母和数字 收藏

        QRegExp regx("[a-zA-Z0-9]+$");

        QValidator *validator = new QRegExpValidator(regx, lined );

        ui->lined->setValidator( validator );

 

2.使用 QIntValidator 整型数验证控件控制QLineEdit的输入范围(代码如下):

  #include <qvalidator.h>

  #include <qlineedit.h>

  QValidator* validator = new QIntValidator( 100, 999, this );

  QLineEdit* edit = new QLineEdit( this );

      // 只允许 edit 输入整数 100 到 999

  edit->setValidator( validator );

  

lineedit = QLineEdit() 实例化一个输入框

 

lineedit =setReadOnly(True) #设置为只读

 

lineedit.setDragEnabled(True) #设置能接受拖放

 

lineedit.setMaxLength(5) #设置最大长度

 

lineedit.selectAll() #全选

 

lineedit.setFocus() #得到焦点

 

lineedit.setInputMask("dx") #设置修饰 该输入框必须输入两个字符

 

punctuationRe = QRegExp(r"[ ,;:.]") #得到一个regexp对象 可用下面的验证

 

lineedit.setValidator(QRegExpValidator(QRegExp(r"[0-9]+")),self) #设置验证 检验用户输入内容

 

lineedit.emit(SIGNAL('textChanged(QString)')) 发出 信号 (设置为只读时貌似发不出 没有具体测试)

 

lineedit.emit(SIGNAL(textEdited(QString)')) 发出 信号 如果设置了验证 该信号在通过验证才能发出 (设置为只读时貌似发不出 没有具体测试)




 在使用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之间的数字,包括浮点数


本文地址:http://blog.jinesc.net/?id=242
版权声明:本文为原创文章,版权归 jinesc 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?