限制QLineEdit的數值輸入範圍

2021-07-04 00:20:36 字數 4499 閱讀 5179

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

lineedit->setvalidator(new qregexpvalidator(regexp, this));

#####或者用這個

qlineedit只輸入字母和數字 收藏

qregexp regx("[a-za-z0-9]+$");

qvalidator *validator = new qregexpvalidator(regx, lined );

ui->lined->setvalidator( validator );

2.使用 qintvalidator 整型數驗證控制項控制qlineedit的輸入範圍(**如下):

#include

#include

qvalidator* validator = new qintvalidator( 100, 999, this );

qlineedit* edit = new qlineedit( this );

// 只允許 edit 輸入整數 100 到 999

edit->setvalidator( validator );

lineedit = qlineedit() 例項化乙個輸入框

lineedit =setreadonly(true) #設定為唯讀

lineedit.setdragenabled(true) #設定能接受拖放

lineedit.setmaxlength(5) #設定最大長度

lineedit.selectall() #全選

lineedit.setfocus() #得到焦點

lineedit.setinputmask("dx") #設定修飾 該輸入框必須輸入兩個字元

punctuationre = qregexp(r"[ ,;:.]") #得到乙個regexp物件 可用下面的驗證

lineedit.setvalidator(qregexpvalidator(qregexp(r"[0-9]+")),self) #設定驗證 檢驗使用者輸入內容

lineedit.emit(signal('textchanged(qstring)')) 發出 訊號 (設定為唯讀時貌似發不出 沒有具體測試)

lineedit.emit(signal(textedited(qstring)')) 發出 訊號 如果設定了驗證 該訊號在通過驗證才能發出 (設定為唯讀時貌似發不出 沒有具體測試)

在使用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時,發現只能限制只輸入小數,但是無法設定數值範圍,因此有必要對這個問題做一番研究。

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

限制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 使用...