限制QLineEdit的數值輸入範圍

2021-07-03 07:49:23 字數 3150 閱讀 5381

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

例1:[cpp]view plain

copy

lineedit->setvalidator(

newqintvalidator(0, 1000, 

this

));  

例2:[cpp]view plain

copy

lineedit->setvalidator(

newqdoublevalidator(-180.0,180.0,6,

this

));  

對於浮點數,使用qdoublevalidator時,發現只能限制只輸入小數,但是無法設定數值範圍,因此有必要對這個問題做一番研究。(使用qdoublevalidator 校驗浮點數需要使用setnotation和setlocale兩個函式才能限制輸入浮點數的範圍。)

除了qintvalidator和qdoublevalidator,qt提供另一種校驗器是正規表示式校驗器:qregexpvalidator,下面是一些常用的利用正規表示式校驗器限定數值範圍的用法:

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

[cpp]view plain

copy

qregexp rx(

"^(-?[0]|-?[1-9][0-9])(?:\\.\\d)?$|(^\\t?$)"

);  

qregexpvalidator *preg = new

qregexpvalidator(rx, 

this

);  

lineedit->setvalidator(preg);  

限制浮點數輸入範圍為[-180,180]

[cpp]view plain

copy

qregexp rx(

"(^-?180$)|(^-?1[0-7]\\d$)|(^-?[1-9]\\d$)|(^-?[1-9]$)|^0$"

);  

qregexpvalidator *preg = new

qregexpvalidator(rx, 

this

);  

lineedit->setvalidator(preg);  

限制浮點數輸入範圍為[-180,180]

[cpp]view plain

copy

qregexp rx(

"^-?(180|1?[0-7]?\\d(\\.\\d+)?)$"

);  

qregexpvalidator *preg = new

qregexpvalidator(rx, 

this

);  

lineedit->setvalidator(preg);  

限制浮點數輸入範圍為[-180,180]並限定為小數字後4位

[cpp]view plain

copy

qregexp rx(

"^-?(180|1?[0-7]?\\d(\\.\\d)?)$"

);  

qregexpvalidator *preg = new

qregexpvalidator(rx, 

this

);  

lineedit->setvalidator(preg);  

限制浮點數輸入範圍為[-90,90]並限定為小數字後4位

[cpp]view plain

copy

qregexp rx(

"^-?(90|[1-8]?\\d(\\.\\d)?)$"

);  

qregexpvalidator *preg = new

qregexpvalidator(rx, 

this

);  

lineedit->setvalidator(preg);  

簡單說明一下這幾個正規表示式:

^(-?[0]|-?[1-9][0-9])(?:\.\d)?$|(^\t?$)

(^-?180$)|(^-?1[0-7]\d$)|(^-?[1-9]\d$)|(^-?[1-9]$)|^0$

^-?(180|1?[0-7]?\d(\.\d+)?)$

^-?(180|1?[0-7]?\d(\.\d)?)$

^-?(90|[1-8]?\d(\.\d)?)$

式子中開頭的^和結尾的$限定字串的開始和結尾;

"-?" 表示乙個或0個負號,這裡面的問號表示其前面的字元重複0次或1次;

管道符「|」表示平行分組,比如後三個,表示180或其它形式;

[1-9] 表示限定數字範圍為1到9,其餘類似,如果是有限幾個值,還可以用列舉的方式,比如限定-255到255時,第乙個數字2的限定,應該表達為[1,2],這表示這個位置只允許是1或者2;

"\d"是乙個轉義字元,表示匹配一位數字;

「\.」 表示匹配小數點;

"\d+",這裡面的+表示其前面的\d重複一次或多次;

"\d",裡面的表示重複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之間的數字,包括浮點數

限制qlineedit的數值輸入範圍

限制QLineEdit的數值輸入範圍

1.使用正規表示式檢驗qlineedit的輸入範圍 如下 include include qlineedit lineedit new qlineedit this qregexp regexp a za z 1 9 0 9 1 9 0 9 和 1 9 d 上面的正規表示式表示只能輸入大於0的正整數...

限制QLineEdit的數值輸入範圍

在使用qlineedit輸入數值時,經常遇到限制其範圍的需要,比如角太陽高度角範圍為 90,90 經度值範圍 180,180 方位角範圍 0,360 qt提供了qintvalidator和qdoublevalidator可以限定數值輸入範圍,如使用qintvalidator限制整數的數值範圍 例1 ...

qt中限制QLineEdit的輸入範圍

1 輸入整數部分 lineedit setvalidator newqintvalidator 1,1000,this 但是仍然能輸入0000000 2 簡單的小數輸入 lineedit setvalidator newqdoublevalidator 180.0,180.0,6,this 3 使用...