在使用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 使用...