QLineEdit是繼QLabel和QAbstractButton之後最爲常見的輸入類編輯控件。顧名思義,其是單行編輯控件,經常用於編輯簡短的信息,如用戶登錄信息及密碼輸入等。作爲編輯框其具有常見的編輯動作,如清除內容clear,複製copy,剪切cut,粘貼paste,重做rudo、撤銷undo,全選selectAll及設置編輯信息setText及刪除dselete和del及backspace。根據編輯的內容及顯示,QLineEdit有不同的顯示模式:QLineEdit:::Normal 正常顯示,QLineEdi::Password密碼方式顯示,即不具體顯示內容,QLineEdit::NoEcho即不顯示任何輸入,常用語密碼類型,其密碼長度都需要保密的時候。QLineEdit::PasswordEchoOnEdit,就是在編輯的時候顯示字符,負責就顯示密碼類型。
QLineEdit作爲單行編輯框,其最大輸入字符長度是有顯示,一般由maxLength()獲取與設置。其輸入的內容的合法性也可以通過校驗器validator或者輸入掩碼inputmask,或者兩者同時校驗,以保證輸入的內容的有效性,很大程度上可以避免輸入多樣性檢查的難題。
1、QLineEdit重要的屬性
1)echoMode,決定如何輸入和顯示文本給用處,輸出顯示模式,EchoMode echoMode訪問,setEchoMode(EchoMode)進行設置
2)acceptableInput:bool,是否輸入滿足inputMask與validator的驗證,用於指定編輯框的內容形式等,常與setInpuMask及setValidator一起使用。通過hasAcceptableInput()訪問。
3)alignment:編輯內容的邊界顯示情況,即內如如何顯示,默認是左邊豎向居中顯示QAlignment | Qt::AlignVCenter,可以通過setAlignment(Qt::QAlignment )設置,
4)cursorPosition:int,這是鼠標屬性,表示鼠標在編輯框的位置。通過cursorPosition()訪問,setCursorPosition(int)進行設置。默認值爲0
5)displayText: QString ,是當前編輯框的顯示內容。此屬性和echoMode屬性有關係,如果是Normal,其顯示的和text的內容是一致的,如果是Password或者PasswordEchoOnEdit,其顯示的同text同等長度的圓點如“*****”。如果是NoEcho,則此屬性爲空。通過displayText()訪問
這裏text任然是具體的輸入內容。可以訪問並使用。
6)dragEnabled:bool此屬性與鼠標操作相關,是抓起是否可被允許,當有選擇了的文本文件時,鼠標按下並移動時是否允許的操作,通過dragEnabled()訪問,setDragEnable(bool)進行設置。
7)frame:bool此屬性標記是否將LineEdit自己繪製到一個frame框架裏面。通過hasFrame()訪問,setFrame(bool)進行設置。常見的現象如是否有邊框:
8)hasSelectText:bool表示是否有文本被選中。編輯框選擇內容是常見的操作,通過hasSelectText()訪問,對於選擇的文本其存儲在selectText:QString屬性中,selectText()會返回對應的值。
9)inputMask:QString此屬性是文本框的輸入校驗碼,其表示輸入的內容指定的輸入格式及數量等。通過setInputMask進行設置,如果不帶參數或者爲空字符串“”,則取消此inoutMask。
以下是可以用於設置inoutmask的字符。一個空白字符,在如果一個字符輸入是允許的,但不是必須的,則此空白字符是需要加上的
Character | Meaning |
---|---|
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 |
二進制數據字符是允許的,但不是必須要的. |
> |
所有的字符字母都都大寫的. |
< |
所有的字符字幕都是小寫的. |
! |
關閉大小寫. |
\ |
使用 \ 去轉義上面的字符,如果再需要顯示上述字符的時候. |
一個校驗碼就有上述組成,比如
ip地址:000.000.000.000;_ 空白符就是_
mac地址:HH:HH:HH:HH:HH:HH
10)maxLength:int 此屬性表示此編輯框最多允許輸入的字符長度。如果過場,會被截取到限定的長度。如果發生截取情況,之前選中的字符將會unselect釋放,光標位置恢復到0並且顯示字符的開始部分。如果此編輯框有input mask輸入掩碼,那麼掩碼的長度將決定了字符的最大長度,如ip地址最大隻是16個字符。通過maxLength()獲取,setMaxLength(int)設置。最大值爲32767
11)modified:bool,此屬性表示編輯框內容已經被用戶修改了。此屬性有一個很大的用處就是如果再某些輸入需要驗證是否被修改的時候可以使用此屬性。setText()會重置modified標誌。isModified()獲取狀態,setModified(bool)設置此標誌。
12)readOnly:bool 表示此編輯框是否是隻讀的,即不可寫,但可以copy、drag並且drop文本內容,並且不顯示光標。默認此屬性值爲false的。
isReadOnly()獲取此屬性值。setReadOnly(bool)設置此屬性值。
13)redoAvailable:const bool 表示redo操作是否可用,可用的時候是執行了undo從左。
14)undoAvailable:判斷是否可以執行,此操作需要執行,需要用戶修改編輯框內容。
13)、14)屬性是不可以進行設置,其根據操作的最終結果表示的。
15)selectText:constString表示已經被選擇的文本,其和屬性8)hasSelectText搭配使用。
selectText()訪問該屬性的值
16)text屬性,保存編輯框的文本text,設置此屬性,會清楚已經選擇的,清楚undo/redo記錄,將光標移動到編輯框的結尾並且將modified屬性設置爲false。當使用setText文本時text是不進行校驗的validated。文本會被截取到maxLength的長度。text訪問值,setText設置其值。
此屬性會導致textChanged(QString text)信號發射,表示文本已經改了。
綜上所述,QLineEdit屬性主要體現在幾個方面,一方面是QLineEdit的內容顯示,使用對齊模式QAlignment,其次是根據其內容的用途和展現,設置其echoMode。第三個方面是設置校驗器validate或者inputMask,使用acceptableInput表是是否合法輸入。然後是對編輯框的操作,一個是已經選擇的文本,表示hasSelectText,及selectText表示選中的字符,text和displayText表示文本內容和不同表現顯示的文本。redoAvailable及undoAvailable表示其操作。是否可以選中並drap抓取拖動,使用dragEnabled表示是否激活。以及編輯框是否只讀,實現是否框架則用readOnly及frame。
2、重要的槽:
1)clear()用於清空編輯框內容
2)copy()拷貝選中的文本到剪切板,模式必須是Normal
3)cut()拷貝選中的文本到剪切板clipboard並刪除。如果當前的校驗器validator不允許刪除選中的文本,則只拷貝而不刪除。
4)paste()將剪切板文本插入到光標的位置,刪除任何選擇的,並且lineEdit不能是隻讀read-only的。如果最終的結果不符合當前的校驗器,則不會處理。
5)redo(),重置執行最後執行的,redo必須是可用的,即之前要有undo操作
6)undo(),撤銷最後一步執行的操作,undoAvailable是可執行的,deselect釋放所有的選擇,並且將選擇的開始位置設置到當前的光標位置
6)selectAll(),選擇所有的文本並將光標移到文本的最後。此最大的一個用處是使用一個默認值,當鼠標點一下之後,所有的selected選擇的文本都會被刪除。
7)setText(QString text),設置對應的文本內容。同屬性text介紹。
3、重要的信號
1)cursorPositionChange(int old,int new);任何時候光標動的時候,之前的位置爲設置爲old,新的位置被設置爲new,可以使用setCursorPosition(int)設置,及cursorPosition()獲取當前位置。
2)editingFinished():當return返回鍵被按下或者編輯框失去焦點時發射,需要注意的是如果有validator或者inputMask被設置,其信號只在滿足此校驗後設置發射。
3)returnPressed()此信號在returnkey或者enterkey被按下的時候。同樣需要滿足校驗器。
4)selectionChanged()選擇的內容改變時,可以通過hasSelectText()判斷,selectText獲取選擇的文本內容。
5)textChanged(const QString &text)此信號當文本改變的時候就會反射,參數text是改編後新的文本。
6)textEdited(const QString &text)當文本被編輯後發射。文本參數是對應的後續的文本內容。同textChanged不一樣,其程序修改的文本不會發射,如setText,但textChanged會發射
4、其他重要的操作函數:
1)構造函數:
QLineEdit::QLineEdit ( const QString & contents, QWidget * parent = 0 )
創建一個右內容值爲contents的編輯框
光標被設定到末尾,並且最大字符maxLength設置爲32767個字符。
2)刪除編輯框內容操作:
clear()清空內容,backspace()如果沒有選擇的文本,則刪除光標左邊的一個圖標並將光標前移,如果選擇了,則將會刪除選擇的字符串並且將光標移動到最開始的字符的位置。
del(),刪除光標右側的一個字符。
3)光標移動
cursorBackward(bool mark,int steps=1):將光標向後移動steps字符,如果mark是true,則所有被移動過的字符都會被選擇,如果是false,則被反選。
cursorForward(bool mark,int steps=1):將光標向前後移動steps字符,如果mark是true,則所有被移動過的字符都會被選擇,如果是false,則被反選
cursorWordBackward(bool mark),光標向後移動1個單詞,一般是遇到空白符,如果mark是true則會選中
cursorWordForward(bool mark)光標向前移動1個單詞,一般是遇到空白符,如果mark是true則會選中
end(bool mark)將光標移動到最後位置,如果mark爲true,則選中當前光標到最後的位置。否則所有被選擇的都會被反選。
home(bool mark)將光標移動到開始位置。如果mark爲true則會選擇到第一個位置的內容,否則反選已經選擇的內容。
4)選擇或者反選內容:
deselect()反選所有選擇了的文本
selectAll選擇所有的文本
int selectionStart()返回選擇字符的第一個位置的索引,-1是沒有選擇。
setSelection(int start,int length):從指定的start位置開始選擇長度爲length的字符,負數是允許的,即可以前後選擇。
selectText()返回已經選擇的字符
5)插入字符insert(QString newText):刪除之前所選擇的文本,並插入新的文本newText,並校驗驗證器的結果沒如果是真則會將校驗後的值設置爲新的編輯框lineedit的值。
6)設置字體邊界setTextMargin(int left ,int top,int right ,int down)/QMargins
7)設置校驗器及格式掩碼setValidator或者setInputMask。
8)上下文菜單執行
QMenu *createStandartContextMenu()創建一個標準的上下文菜單,其當用戶點擊右鍵的時候顯示。其被默認的contextMenuEvent調用處理。彈出popup menu菜單自己被傳輸給調用者。
如:
QMenu *menu = createStandardContextMenu(); menu->addAction(tr("My Menu Item")); //... menu->exec(event->globalPos()); delete menu;其實可以擴展菜單選項的。作爲編輯的重要內容。
會顯示出來My Menu Item命名的上下文菜單選項。
此具體如何用法,後續會講解contextMenu的QMenu及對應的QAction如何搭配使用。
綜上所述,QLineEdit主要光標的移動一文本內容操作,包括賦值剪切,替換,以及校驗,以及對編輯框操作動作的撤銷和重做、內容刪除選擇等,其完成操作機光標移動翻出的信號,以及選擇當前文本內容的記錄的,以及上下文快捷菜單等。其功能很強大,和其相關的是QTextEdit是多行的富文本編輯。將在稍後章節做詳細的介紹。
本文出自 “zhouhb” 博客,請務必保留此出處http://hongbin0720.blog.51cto.com/3305400/1238831