限制QLineEdit的數值輸入范圍(一共4種限制器:QDoubleValidator, QIntValidator, QRegExpValidator, 和QRegularExpressionValidator)


        在使用QLineEdit輸入數值時,經常遇到限制其范圍的需要,比如角太陽高度角范圍為[-90,90],經度值范圍[-180,180],方位角范圍[0,360]。Qt提供了QIntValidator和QDoubleValidator可以限定數值輸入范圍,如使用QIntValidator限制整數的數值范圍:

例1:

[cpp]  view plain copy
 
  1. lineEdit->setValidator(new QIntValidator(0, 1000, this));  

例2:

[cpp]  view plain copy
 
  1. lineEdit->setValidator(new QDoubleValidator(-180.0,180.0,6,this));  

        對於浮點數,使用QDoubleValidator時,發現只能限制只輸入小數,但是無法設定數值范圍,因此有必要對這個問題做一番研究。

        除了QIntValidator和QDoubleValidator,Qt提供另一種校驗器是正則表達式校驗器:QRegExpValidator,下面是一些常用的利用正則表達式校驗器限定數值范圍的用法:

限制浮點數輸入范圍為[-999999.9999,999999.9999] 

[cpp]  view plain copy
 
  1. QRegExp rx("^(-?[0]|-?[1-9][0-9]{0,5})(?:\\.\\d{1,4})?$|(^\\t?$)");  
  2. QRegExpValidator *pReg = new QRegExpValidator(rx, this);  
  3. lineEdit->setValidator(pReg);  
限制浮點數輸入范圍為[-180,180]

 

[cpp]  view plain copy
 
  1. QRegExp rx("(^-?180$)|(^-?1[0-7]\\d$)|(^-?[1-9]\\d$)|(^-?[1-9]$)|^0$");  
  2. QRegExpValidator *pReg = new QRegExpValidator(rx, this);  
  3. lineEdit->setValidator(pReg);  
限制浮點數輸入范圍為[-180,180]

 

[cpp]  view plain copy
 
  1. QRegExp rx("^-?(180|1?[0-7]?\\d(\\.\\d+)?)$");  
  2. QRegExpValidator *pReg = new QRegExpValidator(rx, this);  
  3. lineEdit->setValidator(pReg);  

限制浮點數輸入范圍為[-180,180]並限定為小數位后4位

[cpp]  view plain copy
 
  1. QRegExp rx("^-?(180|1?[0-7]?\\d(\\.\\d{1,4})?)$");  
  2. QRegExpValidator *pReg = new QRegExpValidator(rx, this);  
  3. lineEdit->setValidator(pReg);  

限制浮點數輸入范圍為[-90,90]並限定為小數位后4位

[cpp]  view plain copy
 
  1. QRegExp rx("^-?(90|[1-8]?\\d(\\.\\d{1,4})?)$");  
  2. QRegExpValidator *pReg = new QRegExpValidator(rx, this);  
  3. 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.csdn.net/giselite/article/details/12708031


免責聲明!

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



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