Qt之QLineEdit详解(附源码)
原博客地址:http://blog.csdn.net/liang19890820/article/details/52044639,感謝原作者總結(jié)和分享。
簡述
QLineEdit是一個(gè)單行文本輸入框。
QLineEdit允許用戶輸入和編輯單行純文本,提供了很多有用的編輯功能,包括:撤消和重做、剪切和粘貼、以及拖放(見setDragEnabled())。
通過改變輸入框的echoMode(),同時(shí)也可以設(shè)置為一個(gè)“只寫”字段,用于輸入密碼等。
文本的長度可以被限制為maxLength(),可以使用一個(gè)validator()或inputMask()來任意限制文本。當(dāng)在同一個(gè)輸入框中切換驗(yàn)證器和輸入掩碼的時(shí)候,最好是清除驗(yàn)證器或輸入掩碼,防止不確定的行為。
- 簡述
- 內(nèi)容
- 詳細(xì)介紹
- 共有類型
- 常用接口
- 信號(hào)
- 共有槽
- 示例
- QLineEditEchoMode效果
- 效果
- 源碼
- 自定義搜索框
- 效果
- 源碼
- 驗(yàn)證器
- 效果
- 源碼
- 輸入掩碼
- 效果
- 源碼
- QLineEditEchoMode效果
- 更多參考
內(nèi)容
詳細(xì)介紹
與其相關(guān)的一個(gè)類是QTextEdit - 允許多行、富文本編輯。
可以使用setText()或insert()來改變文本,通過text()來獲取文本;顯示的文本(可能不同,詳見:EchoMode)通過displayText()來獲取。文本可以使用setSelection()或selectAll()來選中,選中的文本可以被cut()、copy()和paste(),使用setAlignment()來設(shè)置文本的對(duì)齊方式。
當(dāng)文本改變時(shí),會(huì)發(fā)射textChanged()信號(hào)。當(dāng)使用setText()改變文本時(shí),textEdited()信號(hào)也會(huì)發(fā)射。光標(biāo)位置發(fā)生變化時(shí),會(huì)發(fā)射cursorPositionChanged()信號(hào),當(dāng)Return或Enter鍵被按下時(shí),發(fā)射returnPressed()信號(hào)。
當(dāng)編輯完成,或者是因?yàn)檩斎肟蚴ソ裹c(diǎn),或Return/Enter鍵被按下時(shí),發(fā)出的editingFinished()信號(hào)。
注意:如果輸入框有一個(gè)驗(yàn)證器,returnPressed()/editingFinished()信號(hào)只有在驗(yàn)證期返回QValidator::Acceptable的時(shí)候才會(huì)被發(fā)射。
默認(rèn)情況下,QLineEdit具有由平臺(tái)風(fēng)格指南規(guī)定的邊框,可以通過setFrame(false)將其關(guān)閉。
默認(rèn)鍵被綁定描述如下。輸入框還提供了一些編輯選項(xiàng)的上下文菜單(通常通過單擊鼠標(biāo)右鍵調(diào)用)。
| Left Arrow | 光標(biāo)左移一個(gè)字符 |
| Shift+Left Arrow | 光標(biāo)左移并選擇一個(gè)字符 |
| Right Arrow | 光標(biāo)右移一個(gè)字符 |
| Shift+Right Arrow | 光標(biāo)右移并選擇一個(gè)字符 |
| Home | 將光標(biāo)移動(dòng)到行的開頭 |
| End | 將光標(biāo)移動(dòng)到行的末尾 |
| Backspace | 刪除光標(biāo)左側(cè)字符 |
| Ctrl+Backspace | 刪除光標(biāo)左側(cè)的單詞 |
| Delete | 刪除光標(biāo)右側(cè)字符 |
| Ctrl+Delete | 刪除光標(biāo)右側(cè)的單詞 |
| Ctrl+A | 全選 |
| Ctrl+C | 復(fù)制選中的文本復(fù)制到剪貼板 |
| Ctrl+Insert | 復(fù)制選中的文本復(fù)制到剪貼板 |
| Ctrl+K | 刪除此處至末尾所有內(nèi)容 |
| Ctrl+V | 粘貼剪貼板的文本到輸入框中 |
| Shift+Insert | 粘貼剪貼板的文本到輸入框中 |
| Ctrl+X | 剪切選中的文本到剪貼板 |
| Shift+Delete | 剪切選中的文本到剪貼板 |
| Ctrl+Z | 撤銷上一次操作 |
| Ctrl+Y | 重做上一次操作 |
共有類型
枚舉:QLineEdit::ActionPosition
描述如何顯示加入到輸入框中的action部件。
| QLineEdit::LeadingPosition | 0 | 當(dāng)使用布局方向Qt::LeftToRight時(shí),部件顯示在文本左側(cè);使用Qt::RightToLeft時(shí),則顯示在右側(cè)。 |
| QLineEdit::TrailingPosition | 1 | 當(dāng)使用布局方向Qt::LeftToRight時(shí),部件顯示在文本右側(cè);使用Qt::RightToLeft時(shí),則顯示在左側(cè)。 |
枚舉:QLineEdit::EchoMode
描述輸入框如何顯示其內(nèi)容。
| QLineEdit::Normal | 0 | 正常顯示輸入的字符,默認(rèn)選項(xiàng)。 |
| QLineEdit::NoEcho | 1 | 不顯示任何輸入,常用于密碼類型,其密碼長度都需要保密的時(shí)候。 |
| QLineEdit::Password | 2 | 顯示平臺(tái)相關(guān)的密碼掩碼字符,而不是實(shí)際的字符輸入。 |
| QLineEdit::PasswordEchoOnEdit | 3 | 在編輯的時(shí)候顯示字符,負(fù)責(zé)顯示密碼類型。 |
常用接口
這里列舉了一些常用接口,但并非全部的,要獲得更多信息請(qǐng)參考助手。
QString text() const?
返回輸入框的當(dāng)前文本。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?
屬性保存了輸入框的對(duì)齊方式(水平和垂直方向)。Qt::AlignJustify映射到Qt::AlignLeft。?
默認(rèn)情況下,該屬性包含Qt::AlignLeft和Qt::AlignVCenter。QCompleter* completer() const
void setCompleter(QCompleter * c)?
QCompleter后面詳細(xì)講解。void deselect()?
取消選中任何已選中的文本。QString displayText() const?
返回顯示的文本。默認(rèn)值為一個(gè)空字符串。?
如果echoMode是Normal,和text()返回的一樣;如果EchoMode是Password或PasswordEchoOnEdit,會(huì)返回平臺(tái)相關(guān)的密碼掩碼字符,長度為text().length(),例如:"******";如果EchoMode是NoEcho,返回一個(gè)空字符串""。QString selectedText() const?
返回選中的的文本。如果沒有選中,返回一個(gè)空字符串。默認(rèn)為一個(gè)空字符串。int cursorPosition() const
void setCursorPosition(int)
cursorPosition : int?
屬性包含輸入框當(dāng)前光標(biāo)的位置。設(shè)置光標(biāo)位置時(shí),會(huì)導(dǎo)致應(yīng)有的重繪。默認(rèn)情況下,屬性值為0。EchoMode echoMode() const
void setEchoMode(EchoMode)
echoMode : EchoMode?
屬性保存了輸入框的顯示模式。顯示模式?jīng)Q定了輸入框?qū)τ脩舻奈谋撅@示。默認(rèn)值為Normal?
最常用的設(shè)置是Normal,用戶輸入文本被逐字顯示;還包含其它模糊輸入,例如:NoEcho、Password和PasswordEchoOnEdit。?
部件的顯示、復(fù)制或拖動(dòng)文本的行為受此設(shè)置的影響。int maxLength() const
void setMaxLength(int)
maxLength : int?
此屬性包含文本的最大允許長度。如果文本太長,將從限制的位置截?cái)唷DJ(rèn)值為32767。?
如果發(fā)生截?cái)嗳魏芜x中的文本將取消選中,光標(biāo)位置設(shè)置為0,并且顯示字符串的第一部分。?
如果輸入框有一個(gè)輸入掩碼,那么,掩碼定義字符串的最大長度。QString placeholderText() const
void setPlaceholderText(const QString &)
placeholderText : QString?
當(dāng)輸入框?yàn)榭諘r(shí),輸入框顯示一個(gè)灰色的占位符文本。默認(rèn)值為一個(gè)空字符串。?
通常,一個(gè)空的輸入框顯示占位符文本,即使它有焦點(diǎn)。然而,如果內(nèi)容水平居中,當(dāng)輸入框有焦點(diǎn)時(shí),占位符文本不顯示在光標(biāo)下。bool isReadOnly() const
void setReadOnly(bool)
readOnly : bool?
此屬性保存輸入框是否為只讀。?
在只讀模式下,用戶仍然可以將文本復(fù)制到剪貼板,或拖放文本(如果echoMode()是Normal),但不能編輯它。?
只讀模式下,QLineEdit也不顯示光標(biāo)。void setSelection(int start, int length)?
從位置start選擇文本為length個(gè)字符,允許負(fù)長度。void setValidator(const QValidator * v)?
設(shè)置輸入框的驗(yàn)證器,將限制任意可能輸入的文本。如果v == 0,將會(huì)清除當(dāng)前的輸入驗(yàn)證器?
如果v = = 0,setValidator()刪除當(dāng)前的輸入驗(yàn)證器。初始設(shè)置是沒有輸入驗(yàn)證器(即:接受任何輸入到maxLength())。const QValidator * validator() const?
返回一個(gè)當(dāng)前輸入的驗(yàn)證器指針,如果沒有設(shè)置驗(yàn)證器,返回0。QString inputMask() const
void setInputMask(const QString & inputMask)
inputMask : QString?
此屬性保存驗(yàn)證器的輸入掩碼。如果沒設(shè)置研發(fā),inputMask() 或返回一個(gè)空字符串。傳遞一個(gè)空字符串可以取消驗(yàn)碼并返回一個(gè)正常QLineEdit。
下表列出了可在一個(gè)輸入掩碼中使用的字符。空格字符,是一個(gè)空白的缺省字符,當(dāng)一個(gè)字符是允許的,但不是必須的請(qǐng)胯下。
| A | ASCII字母字符是必須的,A-Z、a-z。 |
| a | ASCII字母字符是允許的,但不是必須的。 |
| N | ASCII字母字符是必須的,A-Z、a-z、0-9。 |
| n | ASCII字母字符是允許的,但不是必須的。 |
| X | 任何字符都是必須要的。 |
| x | 任何字符都是允許的,但不是必須要的。 |
| 9 | ASCII數(shù)字是必須要的,0-9。 |
| 0 | ASCII數(shù)字是允許的,但不是必須要的。 |
| D | ASCII數(shù)字是必須要的,1-9。 |
| d | ASCII數(shù)字是允許的,但不是必須要的 (1-9)。 |
| # | ASCII數(shù)字或加/減符號(hào)是允許的,但不是必須要的。 |
| H | 十六進(jìn)制數(shù)據(jù)字符是必須要的,A-F、a-f、0-9。 |
| h | 十六進(jìn)制數(shù)據(jù)字符是允許的,但不是必須要的。 |
| B | 二進(jìn)制數(shù)據(jù)字符是必須要的,0-1。 |
| b | 二進(jìn)制數(shù)據(jù)字符是允許的,但不是必須要的。 |
| > | 所有的字符字母都大寫 |
| < | 所有的字符字母都小寫 |
| ! | 關(guān)閉大小寫轉(zhuǎn)換 |
| \ | 使用 \ 去轉(zhuǎn)義上述列出的字符。 |
掩碼由掩碼字符和分隔符字符串組成,后面可以跟一個(gè)分號(hào)和用于空白的字符,空白字符在編輯后總是從文本中刪除。
示例:
| 000.000.000.000;_ | IP地址,空白是_。 |
| HH:HH:HH:HH:HH:HH;_ | MAC地址。 |
| 0000-00-00 | ISO日期,空白是空格。 |
| >AAAAA-AAAAA-AAAAA-AAAAA-AAAAA;# | License號(hào),空白是-和所有(字母)字符轉(zhuǎn)換為大寫。 |
信號(hào)
void selectionChanged()?
只要選擇改變這個(gè)信號(hào)就會(huì)被發(fā)射。void cursorPositionChanged(int old, int new)?
只要光標(biāo)移動(dòng),這個(gè)信號(hào)就會(huì)發(fā)射。前面的位置old,新的位置是new。void editingFinished()
- void returnPressed()
- void textChanged(const QString & text)
- void textEdited(const QString & text)?
參考:“詳細(xì)描述”
共有槽
void clear()?
清除輸入框內(nèi)容void copy() const?
如果echoMode()是Normal,將選中的文本復(fù)制到剪貼板。void cut()?
如果echoMode()是Normal,將所選文本復(fù)制到剪貼板并刪除它。?
如果當(dāng)前的驗(yàn)證不允許刪除選定的文本,cut()將復(fù)制而不刪除。void paste()?
如果輸入框不是只讀的,插入剪貼板中的文本到光標(biāo)所在位置,刪除任何選定的文本。?
如果最終的結(jié)果不被當(dāng)前的驗(yàn)證器接受,將沒有任何反應(yīng)。void redo()?
重做上次操作,如果redo可用(isRedoAvailable() )。void selectAll()?
選中所有文本(即:高亮),并將光標(biāo)移動(dòng)到末尾。當(dāng)一個(gè)默認(rèn)值被插入時(shí),這非常有用,因?yàn)槿绻脩粼邳c(diǎn)擊部件之前就輸入,選中的文本將被刪除。void setText(const QString &)?
設(shè)置輸入框顯示的文本。void undo()?
撤消上次操作,如果撤消可用( isUndoAvailable())。取消任何當(dāng)前的選中,并更新選中到當(dāng)前光標(biāo)位置。
示例
QLineEdit::EchoMode效果
首先,來演示QLineEdit::EchoMode的效果。
效果
源碼
[cpp]?view plaincopy自定義搜索框
關(guān)于搜索框,我們經(jīng)常接觸。例如:瀏覽器搜索、Windows資源管理器搜索等。
效果
源碼
通過QLineEdit的addAction()函數(shù)來加入action,這里我們使用了重載函數(shù)。
[cpp]?view plaincopy
槽函數(shù),用于獲取輸入框中的內(nèi)容,然后處理。
[cpp]?view plaincopy
驗(yàn)證器
通常情況下,我們會(huì)對(duì)用戶的輸入做一些限制,可以通過驗(yàn)證起來設(shè)置,常見的有:整形、浮點(diǎn)型及其它自定義驗(yàn)證器。
效果
源碼
[cpp]?view plaincopy輸入掩碼
要限制用戶輸入,除了驗(yàn)證器,還可以使用輸入掩碼,常見的有IP、MAC地址、日期、License號(hào)等。
效果
源碼
[cpp]?view plaincopy源碼下載地址:http://download.csdn.net/detail/rl529014/9596939
總結(jié)
以上是生活随笔為你收集整理的Qt之QLineEdit详解(附源码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mongo分组查询,统计 Group.g
- 下一篇: 美创科技荣获国家信息安全漏洞库(CNNV