Qt QLineEdit 輸入框


QLineEdit是一個單行文本編輯控件。

使用者可以通過很多函數,輸入和編輯單行文本,比如撤銷、恢復、剪切、粘貼以及拖放等。

通過改變QLineEdit的 echoMode() ,可以設置其屬性,比如以密碼的形式輸入。

文本的長度可以由 maxLength() 限制,可以通過使用 validator() 或者 inputMask() 可以限制它只能輸入數字。在對同一個QLineEdit的validator或者input mask進行轉換時,最好先將它的validator或者input mask清除,以避免錯誤發生。

與QLineEdit相關的一個類是QTextEdit,它允許多行文字以及富文本編輯。

我們可以使用 setText() 或者 insert() 改變其中的文本,通過 text() 獲得文本,通過 displayText() 獲得顯示的文本,使用 setSelection() 或者 selectAll() 選中文本,選中的文本可以通過cut()、copy()、paste()進行剪切、復制和粘貼,使用 setAlignment() 設置文本的位置。

文本改變時會發出 textChanged() 信號;如果不是由setText()造成文本的改變,那么會發出textEdit()信號;鼠標光標改變時會發出cursorPostionChanged()信號;當返回鍵或者回車鍵按下時,會發出returnPressed()信號。

當編輯結束,或者LineEdit失去了焦點,或者當返回/回車鍵按下時,editFinished()信號將會發出。

 

以上是Qt官方文檔對QLineEdit的簡要說明,下面對一些常用的方法作說明:

 

1. QLineEdit 接收用戶輸入

QLineEdit 繼承自 QWidget 基類

顯示模式

顯示模式 效果
QLineEdit::Normal 正常顯示
QLineEdit::NoEcho 不顯示
QLineEdit::Password 密碼顯示
QLineEdit::PasswordEchoOnEdit 編輯時候正常顯示,其他密碼顯示

 

2. QLineEdit 掩碼字符 inputMask

對用戶的輸入進行一些限制

如:

> 輸入轉換為大寫,

Aa 頭兩個必須輸入為字母,a 第二個字母可以為空格

-分隔符

90 第三第四個可以為數字,0 第四個數字可以為空

-分隔符

< 輸入轉換為小寫

AA 兩個不能為空格的字母,

-分隔符,

!取消大小寫轉換

aaa 三個可以為空格的字母位,

\! 轉義分隔符,轉義后這里的 ! 為分隔符

HH 為16進制符

 

字符(必須輸入) 字符(可留空) 含義
A a 只能輸入A-Z,a-z
N n 只能輸入A-Z,a-z,0~9
X x 可以輸入任意字符
9 0 只能輸入0-9
D d 只能輸入1-9
  # 只能輸入 +, -, 0-9
H h 只能輸入十六進制字符 (0-9,a-f,A-F)
B b 只能輸入二進制字符(0,1)
> 后面的字母字符自動轉換為大寫
> 后面的字母字符自動轉換為小寫
! 停止字母字符的大小寫轉換
\ 將該表中的特殊字符正常顯示用作分隔符

 QPushButton 按鈕類,常用顯示文字、圖標。

QRadioButton 單選按鈕類,只能選一個,當將單選按鈕加入一個分組框中時,加入的按鈕便是一個分組,分組中只能選中一個,具有排他性。QCheckBox是多選按鈕類,可多選。

 

3. setPlaceholderText()設置提示文字

豆瓣電影的搜索輸入框,沒有輸入任何字符時,顯示“電影、影人、影院、電視劇”這些占位文字,對用戶輸入作相關提示。

echoLineEdit->setPlaceholderText( "電影、影人、影院、電視劇" );

 

4. setEchoMode()設置模式

淘寶登錄界面的一部分,用戶名可以直接看到,密碼一般都用小黑點掩蓋。

switch  (index) {
     case  0:
         //默認,輸入什么即顯示什么
         echoLineEdit->setEchoMode(QLineEdit::Normal);
         break ;
     case  1:
         //密碼,一般是用小黑點覆蓋你所輸入的字符
         echoLineEdit->setEchoMode(QLineEdit::Password);
         break ;
     case  2:
         //編輯時輸入字符顯示輸入內容,否則用小黑點代替
         echoLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);
         break ;
     case  3:
         //任何輸入都看不見(只是看不見,不是不能輸入)
         echoLineEdit->setEchoMode(QLineEdit::NoEcho);
     }

 

5. setAlignment()設置文本位置

switch  (index) 
   {
case 0: alignmentLineEdit->setAlignment(Qt::AlignLeft); break ; case 1: alignmentLineEdit->setAlignment(Qt::AlignCenter); break ; case 2: alignmentLineEdit->setAlignment(Qt::AlignRight); }

 

6. setReadOnly()設置能否編輯

switch  (index) 
    {
     case  0:
         accessLineEdit->setReadOnly( false );
         break ;
     case  1:
         accessLineEdit->setReadOnly( true );
     }

 

7. setValidator()對輸入進行限制

這種方式的實質是通過正則表達式限制輸入的內容。

switch  (index) 
     {
     case  0:
         //無限制
         validatorLineEdit->setValidator(0);
         break ;
     case  1:
         //只能輸入整數
         validatorLineEdit->setValidator( new  QIntValidator(
             validatorLineEdit));
         break ;
     case  2:
         //實例,只能輸入-180到180之間的小數,小數點后最多兩位(可用於限制經緯度等)
         QDoubleValidator *pDfValidator =  new  QDoubleValidator(-180.0, 180.0 , 2, validatorLineEdit);
         pDfValidator->setNotation(QDoubleValidator::StandardNotation);
         validatorLineEdit->setValidator(pDfValidator);
     }

 

8. setInputMask()對輸入進行限制

通過限制格式限制輸入,具體怎么格式化可以參考Qt助手。

switch  (index) 
     {
     case  0:
         inputMaskLineEdit->setInputMask( "" );
         break ;
     case  1:
         inputMaskLineEdit->setInputMask( "+99 99 99 99 99;_" );
         break ;
     case  2:
         inputMaskLineEdit->setInputMask( "0000-00-00" );
         inputMaskLineEdit->setText( "00000000" );
         inputMaskLineEdit->setCursorPosition(0);
         break ;
     case  3:
         inputMaskLineEdit->setInputMask( ">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#" );
     }

 

9. setMaxLength()設置可以輸入的最多字符數

//最多只能輸入9個字符
echoLineEdit->setMaxLength(9);

 

10. validator和inputmask的結合

比如緯度用“度:分:秒”的格式表示,分和秒的范圍都是00-59,度的范圍是-89到89。

QRegExp rx( "(-|\\+)?[0-8]\\d:[0-5]\\d:[0-5]\\d" );
echoLineEdit->setValidator( new  QRegExpValidator(rx, echoLineEdit));
echoLineEdit->setInputMask( "#00:00:00;0" );
echoLineEdit->setText( "+00:00:00" );

如果不控制輸入,那么必須在輸入后檢查輸入是否合法,但控制輸入后的輸入肯定是合法的,可以省去檢查合法的繁瑣步驟。只需使用正則表達式控制輸入的度分秒范圍,然后控制輸入的格式。

 


免責聲明!

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



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