Qt QLineEdit控件的用法(附带实例)
Qt 中的 QLineEdit 部件是一个单行的文本编辑器,它允许用户输入和编辑单行的纯文本内容,而且提供了一系列有用的功能,包括撤销与恢复、剪切和拖放等操作。其中,剪切、复制等功能是行编辑自带的,不用自己编码实现。

图 1 行编辑器界面设计
然后将各个 Line Edit 从上到下依次更改其 objectName为lineEdit1、lineEdit2、lineEdit3 和 lineEdit4。
这里在属性编辑器中设置 lineEdit1 的 echoMode 为 Password。
先来看一下这些特殊字符的含义,如下表所示:
下面将 lineEdit2 的 inputMask 属性设置为“>AA-90-bb-!aa\#H;*”,它表示的含义如下:
另外,也可以使用 setInputMask() 函数在代码中设置输入掩码。
在 lineEdit2 上右击,然后转到它的 returnPressed() 回车键按下信号的槽中,更改如下:
在 mywidget.cpp 文件的构造函数中添加代码:
QValidator 还提供了 QDoubleValidator,可以用它来设置浮点数。如果想设置更强大的字符约束,就要使用正则表达式了,这里举一个简单的例子:
在 MyWidget 类的构造函数中继续添加代码:
举个简单的例子,新建 Qt Widgets 应用,项目名称为 mylineedit,基类选择 QWidget,类名设为 MyWidget。在设计模式中往界面上分别拖入 4 个标签和 Line Edit,行编辑器设计界面如下图所示。关于该部件,读者还可以查看 Qt 提供的示例程序 Line Edits。

图 1 行编辑器界面设计
然后将各个 Line Edit 从上到下依次更改其 objectName为lineEdit1、lineEdit2、lineEdit3 和 lineEdit4。
QLineEdit显示模式
QLineEdit 有 4 种显示模式(echoMode),可以在 echoMode 属性中更改它们。这 4 种模式分别是:- Normal,正常显示输入的信息;
- NoEcho,不显示任何输入,这样可以保证不泄露输入的字符位数;
- Password,显示为密码样式,就是以小黑点或星号之类的字符代替输入的字符;
- PasswordEchoOnEdit,在编辑时显示正常字符,其他情况下显示为密码样式。
这里在属性编辑器中设置 lineEdit1 的 echoMode 为 Password。
QLineEdit输入掩码
QLineEdit提供了输入掩码(inputMask)来限制输入的内容。可以使用一些特殊的字符来设置输入的格式和内容,这些字符中有的起限制作用且必须要输入一个字符,有的只是起限制作用,但可以不输入字符而是以空格代替。先来看一下这些特殊字符的含义,如下表所示:
掩码字符(必须输入) | 掩码字符(可留空) | 含义 |
---|---|---|
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 | 只能输入十六进制字符,A~F,a~f,0~9 |
B | b | 只能输入二进制字符,0 或 1 |
> | 后面的字母字符自动转换为大写 | |
< | 后面的字母字符自动转换为小写 | |
! | 停止字母字符的大小写转换 | |
;c | 终止输入掩码并使用指定字符 c 来填充空白字符 | |
\ | 将该表中的特殊字符正常显示用作分隔符 |
下面将 lineEdit2 的 inputMask 属性设置为“>AA-90-bb-!aa\#H;*”,它表示的含义如下:
- “>”号表明后面输入的字母自动转为大写;
- “AA”表明开始必须输入两个字母,因为有前面的“>”号的作用,所以输入的这两个字母会自动变为大写;
- “-”号为分隔符,直接显示,该位不可输入;
- “9”表示必须输入一个数字;
- “0”表示输入一个数字,或者留空;
- “bb”表示这两位可以留空,或者输入两个二进制字符,即 0 或 1;
- “!”表明停止大小写转换,就是在最开始的“>”号不再起作用;
- “aa”表示可以留空,或者输入两个字母;
- “\#”表示将“#”号作为分隔符,因为“#”号在这里有特殊含义,所以前面要加上“\”号;
- “H”表明必须输入一个十六进制的字符;
- “;*”表示用“*”号来填充空格。
另外,也可以使用 setInputMask() 函数在代码中设置输入掩码。
在 lineEdit2 上右击,然后转到它的 returnPressed() 回车键按下信号的槽中,更改如下:
void MyWidget::on_lineEdit2_returnPressed() // 回车键按下信号的槽 { ui->lineEdit3->setFocus(); // 让lineEdit3获得焦点 qDebug() << ui->lineEdit2->text(); // 输出lineEdit2的内容 qDebug() << ui->lineEdit2->displayText(); // 输出lineEdit2显示的内容 }这里先让下一个行编辑器获得焦点,然后输出 lineEdit2 的内容和显示出来的内容,它们有时是不一样的,编程时更多的是使用 text() 函数来获取它的内容。这时运行程序在 lineEdit2 中进行输入,完成后按下回车键,可以查看一下输出的内容。
注意,如果没有输入完那些必须要输入的字符,按下回车键是不起作用的。
QLineEdit输入验证
在 QLineEdit 中还可以使用验证器(validator)来对输入进行约束。在 mywidget.cpp 文件的构造函数中添加代码:
// 新建验证器,指定范围为100~999 QValidator *validator = new QIntValidator(100, 999, this); // 在行编辑器中使用验证器 ui->lineEdit3->setValidator(validator);在代码中为 lineEdit3 添加了验证器,那么它现在只能输入数字 100~999。可以再进入 lineEdit3 的回车键按下信号的槽,输出 lineEdit3 的内容。然后运行程序会发现,其他的字符无法输入,而输入小于 100 的数字时,按下回车键也是没有效果的。
QValidator 还提供了 QDoubleValidator,可以用它来设置浮点数。如果想设置更强大的字符约束,就要使用正则表达式了,这里举一个简单的例子:
QRegularExpression rx("-?\\d{1,3}"); QValidator *validator = new QRegularExpressionValidator(rx, this);这样就可以实现在开始输入“-”号或者不输入,然后输入 1~3 个数字的限制。注意这里还要添加
#include <QRegularExpressionValidator>
头文件。QLineEdit自动补全
QLineEdit 也提供了强大的自动补全功能,这是利用 QCompleter 类实现的。在 MyWidget 类的构造函数中继续添加代码:
QStringList wordList; wordList << "Qt" << "Qt Creator" << tr("你好"); QCompleter *completer = new QCompleter(wordList, this); // 新建自动完成器 completer->setCaseSensitivity(Qt::CaseInsensitive); // 设置大小写不敏感 ui->lineEdit4->setCompleter(completer);注意添加
#include <QCompleter>
头文件,运行程序,在最后一个行编辑器中输入“Q”,就会自动出现“Qt”和“Qt Creator”两个选项。
关于 QCompleter 的使用,还可以参考一下 Qt 的示例程序 Completer。