1. 程式人生 > >Qt 之 QLineEdit

Qt 之 QLineEdit

簡述

QLineEdit是一個單行文字輸入框。

QLineEdit允許使用者輸入和編輯單行純文字,提供了很多有用的編輯功能,包括:撤消和重做、剪下和貼上、以及拖放(見setDragEnabled())。

通過改變輸入框的echoMode(),同時也可以設定為一個“只寫”欄位,用於輸入密碼等。

文字的長度可以被限制為maxLength(),可以使用一個validator()或inputMask()來任意限制文字。當在同一個輸入框中切換驗證器和輸入掩碼的時候,最好是清除驗證器或輸入掩碼,防止不確定的行為。

|

內容

詳細介紹

與其相關的一個類是QTextEdit - 允許多行、富文字編輯。

可以使用setText()或insert()來改變文字,通過text()來獲取文字;顯示的文字(可能不同,詳見:EchoMode)通過displayText()來獲取。文字可以使用setSelection()或selectAll()來選中,選中的文字可以被cut()、copy()和paste(),使用setAlignment()來設定文字的對齊方式。

當文字改變時,會發射textChanged()訊號。當使用setText()改變文字時,textEdited()訊號也會發射。游標位置發生變化時,會發射cursorPositionChanged()訊號,當Return或Enter鍵被按下時,發射returnPressed()訊號。

當編輯完成,或者是因為輸入框失去焦點,或Return/Enter鍵被按下時,發出的editingFinished()訊號。

注意:如果輸入框有一個驗證器,returnPressed()/editingFinished()訊號只有在驗證期返回QValidator::Acceptable的時候才會被髮射。

預設情況下,QLineEdit具有由平臺風格指南規定的邊框,可以通過setFrame(false)將其關閉。

預設鍵被繫結描述如下。輸入框還提供了一些編輯選項的上下文選單(通常通過單擊滑鼠右鍵呼叫)。

按鍵 動作
Left Arrow 游標左移一個字元
Shift+Left Arrow 游標左移並選擇一個字元
Right Arrow 游標右移一個字元
Shift+Right Arrow 游標右移並選擇一個字元
Home 將游標移動到行的開頭
End 將游標移動到行的末尾
Backspace 刪除游標左側字元
Ctrl+Backspace 刪除游標左側的單詞
Delete 刪除游標右側字元
Ctrl+Delete 刪除游標右側的單詞
Ctrl+A 全選
Ctrl+C 複製選中的文字複製到剪貼簿
Ctrl+Insert 複製選中的文字複製到剪貼簿
Ctrl+K 刪除此處至末尾所有內容
Ctrl+V 貼上剪貼簿的文字到輸入框中
Shift+Insert 貼上剪貼簿的文字到輸入框中
Ctrl+X 剪下選中的文字到剪貼簿
Shift+Delete 剪下選中的文字到剪貼簿
Ctrl+Z 撤銷上一次操作
Ctrl+Y 重做上一次操作

共有型別

  • 列舉:QLineEdit::ActionPosition

    描述如何顯示加入到輸入框中的action部件。

常量 描述
QLineEdit::LeadingPosition 0 當使用佈局方向Qt::LeftToRight時,部件顯示在文字左側;使用Qt::RightToLeft時,則顯示在右側。
QLineEdit::TrailingPosition 1 當使用佈局方向Qt::LeftToRight時,部件顯示在文字右側;使用Qt::RightToLeft時,則顯示在左側。
  • 列舉:QLineEdit::EchoMode

    描述輸入框如何顯示其內容。

常量 描述
QLineEdit::Normal 0 正常顯示輸入的字元,預設選項。
QLineEdit::NoEcho 1 不顯示任何輸入,常用於密碼型別,其密碼長度都需要保密的時候。
QLineEdit::Password 2 顯示平臺相關的密碼掩碼字元,而不是實際的字元輸入。
QLineEdit::PasswordEchoOnEdit 3 在編輯的時候顯示字元,負責顯示密碼型別。

常用介面

這裡列舉了一些常用介面,但並非全部的,要獲得更多資訊請參考助手。

  • QString text() const
    返回輸入框的當前文字。

  • void addAction(QAction * action, ActionPosition position)

  • QAction * addAction(const QIcon & icon, ActionPosition position)
    新增action至指定位置。

  • Qt::Alignment alignment() const

  • void setAlignment(Qt::Alignment flag)

    alignment : Qt::Alignment
    屬性儲存了輸入框的對齊方式(水平和垂直方向)。Qt::AlignJustify對映到Qt::AlignLeft。
    預設情況下,該屬性包含Qt::AlignLeft和Qt::AlignVCenter。

  • QCompleter* completer() const

  • void setCompleter(QCompleter * c)
    QCompleter後面詳細講解。

  • void deselect()
    取消選中任何已選中的文字。

  • QString displayText() const
    返回顯示的文字。預設值為一個空字串。
    如果echoMode是Normal,和text()返回的一樣;如果EchoMode是Password或PasswordEchoOnEdit,會返回平臺相關的密碼掩碼字元,長度為text().length(),例如:"******";如果EchoMode是NoEcho,返回一個空字串""

  • QString selectedText() const
    返回選中的的文字。如果沒有選中,返回一個空字串。預設為一個空字串。

  • int cursorPosition() const

  • void setCursorPosition(int)

    cursorPosition : int
    屬性包含輸入框當前游標的位置。設定游標位置時,會導致應有的重繪。預設情況下,屬性值為0。

  • EchoMode echoMode() const

  • void setEchoMode(EchoMode)

    echoMode : EchoMode
    屬性儲存了輸入框的顯示模式。顯示模式決定了輸入框對使用者的文字顯示。預設值為Normal
    最常用的設定是Normal,使用者輸入文字被逐字顯示;還包含其它模糊輸入,例如:NoEcho、Password和PasswordEchoOnEdit。
    部件的顯示、複製或拖動文字的行為受此設定的影響。

  • int maxLength() const

  • void setMaxLength(int)

    maxLength : int
    此屬性包含文字的最大允許長度。如果文字太長,將從限制的位置截斷。預設值為32767。
    如果發生截斷任何選中的文字將取消選中,游標位置設定為0,並且顯示字串的第一部分。
    如果輸入框有一個輸入掩碼,那麼,掩碼定義字串的最大長度。

  • QString placeholderText() const

  • void setPlaceholderText(const QString &)

    placeholderText : QString
    當輸入框為空時,輸入框顯示一個灰色的佔位符文字。預設值為一個空字串。
    通常,一個空的輸入框顯示佔位符文字,即使它有焦點。然而,如果內容水平居中,當輸入框有焦點時,佔位符文字不顯示在游標下。

  • bool isReadOnly() const

  • void setReadOnly(bool)

    readOnly : bool
    此屬性儲存輸入框是否為只讀。
    在只讀模式下,使用者仍然可以將文字複製到剪貼簿,或拖放文字(如果echoMode()是Normal),但不能編輯它。
    只讀模式下,QLineEdit也不顯示游標。

  • void setSelection(int start, int length)
    從位置start選擇文字為length個字元,允許負長度。

  • void setValidator(const QValidator * v)
    設定輸入框的驗證器,將限制任意可能輸入的文字。如果v == 0,將會清除當前的輸入驗證器
    如果v = = 0,setValidator()刪除當前的輸入驗證器。初始設定是沒有輸入驗證器(即:接受任何輸入到maxLength())。

  • const QValidator * validator() const
    返回一個當前輸入的驗證器指標,如果沒有設定驗證器,返回0。

  • QString inputMask() const

  • void setInputMask(const QString & inputMask)

    inputMask : QString
    此屬性儲存驗證器的輸入掩碼。如果沒設定研發,inputMask() 或返回一個空字串。傳遞一個空字串可以取消驗碼並返回一個正常QLineEdit。

下表列出了可在一個輸入掩碼中使用的字元。空格字元,是一個空白的預設字元,當一個字元是允許的,但不是必須的請胯下。

字元 含義
A ASCII字母字元是必須的,A-Z、a-z。
a ASCII字母字元是允許的,但不是必須的。
N ASCII字母字元是必須的,A-Z、a-z、0-9。
n ASCII字母字元是允許的,但不是必須的。
X 任何字元都是必須要的。
x 任何字元都是允許的,但不是必須要的。
9 ASCII數字是必須要的,0-9。
0 ASCII數字是允許的,但不是必須要的。
D ASCII數字是必須要的,1-9。
d ASCII數字是允許的,但不是必須要的 (1-9)。
# ASCII數字或加/減符號是允許的,但不是必須要的。
H 十六進位制資料字元是必須要的,A-F、a-f、0-9。
h 十六進位制資料字元是允許的,但不是必須要的。
B 二進位制資料字元是必須要的,0-1。
b 二進位制資料字元是允許的,但不是必須要的。
> 所有的字元字母都大寫
< 所有的字元字母都小寫
! 關閉大小寫轉換
\ 使用 \ 去轉義上述列出的字元。

掩碼由掩碼字元和分隔符字串組成,後面可以跟一個分號和用於空白的字元,空白字元在編輯後總是從文字中刪除。

示例:

掩碼 注意事項
000.000.000.000;_ IP地址,空白是_。
HH:HH:HH:HH:HH:HH;_ MAC地址。
0000-00-00 ISO日期,空白是空格。
>AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;# License號,空白是-和所有(字母)字元轉換為大寫。

訊號

  • void selectionChanged()
    只要選擇改變這個訊號就會被髮射。

  • void cursorPositionChanged(int old, int new)
    只要游標移動,這個訊號就會發射。前面的位置old,新的位置是new。

  • void editingFinished()

  • void returnPressed()
  • void textChanged(const QString & text)
  • void textEdited(const QString & text)
    參考:“詳細描述”

共有槽

  • void clear()
    清除輸入框內容

  • void copy() const
    如果echoMode()是Normal,將選中的文字複製到剪貼簿。

  • void cut()
    如果echoMode()是Normal,將所選文字複製到剪貼簿並刪除它。
    如果當前的驗證不允許刪除選定的文字,cut()將複製而不刪除。

  • void paste()
    如果輸入框不是隻讀的,插入剪貼簿中的文字到游標所在位置,刪除任何選定的文字。
    如果最終的結果不被當前的驗證器接受,將沒有任何反應。

  • void redo()
    重做上次操作,如果redo可用(isRedoAvailable() )。

  • void selectAll()
    選中所有文字(即:高亮),並將游標移動到末尾。當一個預設值被插入時,這非常有用,因為如果使用者在點選部件之前就輸入,選中的文字將被刪除。

  • void setText(const QString &)
    設定輸入框顯示的文字。

  • void undo()
    撤消上次操作,如果撤消可用( isUndoAvailable())。取消任何當前的選中,並更新選中到當前游標位置。

示例

QLineEdit::EchoMode效果

首先,來演示QLineEdit::EchoMode的效果。

效果

這裡寫圖片描述

原始碼

QLineEdit *pNormalLineEdit = new QLineEdit(this);
QLineEdit *pNoEchoLineEdit = new QLineEdit(this);
QLineEdit *pPasswordLineEdit = new QLineEdit(this);
QLineEdit *pPasswordEchoOnEditLineEdit = new QLineEdit(this);

pNormalLineEdit->setPlaceholderText("Normal");
pNoEchoLineEdit->setPlaceholderText("NoEcho");
pPasswordLineEdit->setPlaceholderText("Password");
pPasswordEchoOnEditLineEdit->setPlaceholderText("PasswordEchoOnEdit");

// 設定顯示效果
pNormalLineEdit->setEchoMode(QLineEdit::Normal);
pNoEchoLineEdit->setEchoMode(QLineEdit::NoEcho);
pPasswordLineEdit->setEchoMode(QLineEdit::Password);
pPasswordEchoOnEditLineEdit->setEchoMode(QLineEdit::PasswordEchoOnEdit);

自定義搜尋框

關於搜尋框,我們經常接觸。例如:瀏覽器搜尋、Windows資源管理器搜尋等。

效果

這裡寫圖片描述

原始碼

通過QLineEdit的addAction()函式來加入action,這裡我們使用了過載函式。

m_pLineEdit = new QLineEdit(this);
m_pLabel = new QLabel(this);

m_pLineEdit->setPlaceholderText(QString::fromLocal8Bit("請輸入搜尋內容"));

// 新增action
QAction *pLeadingAction = new QAction(this);
pLeadingAction->setIcon(QIcon(":/Images/leading"));

m_pLineEdit->addAction(pLeadingAction, QLineEdit::LeadingPosition);
QAction *pTrailingAction = m_pLineEdit->addAction(QIcon(":/Images/trailing"), QLineEdit::TrailingPosition);

// 連線訊號和槽
connect(pTrailingAction, SIGNAL(triggered(bool)), this, SLOT(onSearch(bool)));

槽函式,用於獲取輸入框中的內容,然後處理。

void MainWindow::onSearch(bool checked)
{
    QString strText = m_pLineEdit->text();
    m_pLabel->setText(QString::fromLocal8Bit("輸入內容為:%1").arg(strText));
}

驗證器

通常情況下,我們會對使用者的輸入做一些限制,可以通過驗證起來設定,常見的有:整形、浮點型及其它自定義驗證器。

效果

這裡寫圖片描述

原始碼

QLineEdit *pIntLineEdit = new QLineEdit(this);
QLineEdit *pDoubleLineEdit = new QLineEdit(this);
QLineEdit *pValidatorLineEdit = new QLineEdit(this);

pIntLineEdit->setPlaceholderText(QString::fromLocal8Bit("整形"));
pDoubleLineEdit->setPlaceholderText(QString::fromLocal8Bit("浮點型"));
pValidatorLineEdit->setPlaceholderText(QString::fromLocal8Bit("字母和數字"));

// 整形 範圍:[1, 99]
QIntValidator *pIntValidator = new QIntValidator(this);
pIntValidator->setRange(1, 99);

// 浮點型 範圍:[-360, 360] 精度:小數點後2位
QDoubleValidator *pDoubleValidator = new QDoubleValidator(this);
pDoubleValidator->setRange(-360, 360);
pDoubleValidator->setNotation(QDoubleValidator::StandardNotation);
pDoubleValidator->setDecimals(2);

// 字元和數字
QRegExp reg("[a-zA-Z0-9]+$");
QRegExpValidator *pValidator = new QRegExpValidator(this);
pValidator->setRegExp(reg);

pIntLineEdit->setValidator(pIntValidator);
pDoubleLineEdit->setValidator(pDoubleValidator);
pValidatorLineEdit->setValidator(pValidator);

輸入掩碼

要限制使用者輸入,除了驗證器,還可以使用輸入掩碼,常見的有IP、MAC地址、日期、License號等。

效果

這裡寫圖片描述

原始碼

QLineEdit *pIPLineEdit = new QLineEdit(this);
QLineEdit *pMACLineEdit = new QLineEdit(this);
QLineEdit *pDateLineEdit = new QLineEdit(this);
QLineEdit *pLicenseLineEdit = new QLineEdit(this);

pIPLineEdit->setInputMask("000.000.000.000;_");
pMACLineEdit->setInputMask("HH:HH:HH:HH:HH:HH;_");
pDateLineEdit->setInputMask("0000-00-00");
pLicenseLineEdit->setInputMask(">AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;#");

更多參考