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