限制QLineEdit的數值輸入範圍

2021-09-12 04:01:27 字數 2130 閱讀 8237

在使用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])(?:\\.\\d)?$|(^\\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)?)$");

qregexpvalidator *preg = new qregexpvalidator(rx, this);

lineedit->setvalidator(preg);

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

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]?)$

限制QLineEdit的數值輸入範圍

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

限制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的正整數...

qt中限制QLineEdit的輸入範圍

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