首页 > 编程笔记 > C++笔记 阅读:99

Qt QLineEdit控件的用法(附带实例)

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

关于该部件,读者还可以查看 Qt 提供的示例程序 Line Edits。

举个简单的例子,新建 Qt Widgets 应用,项目名称为 mylineedit,基类选择 QWidget,类名设为 MyWidget。在设计模式中往界面上分别拖入 4 个标签和 Line Edit,行编辑器设计界面如下图所示。


图 1 行编辑器界面设计

然后将各个 Line Edit 从上到下依次更改其 objectName为lineEdit1、lineEdit2、lineEdit3 和 lineEdit4。

QLineEdit显示模式

QLineEdit 有 4 种显示模式(echoMode),可以在 echoMode 属性中更改它们。这 4 种模式分别是:
这里在属性编辑器中设置 lineEdit1 的 echoMode 为 Password。

QLineEdit输入掩码

QLineEdit提供了输入掩码(inputMask)来限制输入的内容。可以使用一些特殊的字符来设置输入的格式和内容,这些字符中有的起限制作用且必须要输入一个字符,有的只是起限制作用,但可以不输入字符而是以空格代替。

先来看一下这些特殊字符的含义,如下表所示:

表:QLineEdit 掩码字符和元字符
掩码字符(必须输入) 掩码字符(可留空) 含义
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;*”,它表示的含义如下:
另外,也可以使用 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。

相关文章