QLineEdit輸入限制


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之間的數字,包括浮點數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM