第六篇:其他窗口部件 QLineEdit

QLineEdit

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

显示模式

QLineEdit 有4种显示模式(echoMode):

  • Normal:正常显示输入的信息
  • NoEcho:不显示任何输入(可以保证不泄露输入的字符位数)
  • Password:显示为密码样式,小黑点或星号之类
  • PasswordEchoOnEdit:在编辑时显示正常字符,其他情况下显示为密码样式

示例代码:

C++ 复制代码
QLineEdit *lineEdit = new QLineEdit();
lineEdit->setEchoMode(QLineEdit::Password);

输入掩码

QLineEdit 提供了输入掩码(intputMask)来限制输入的内容。

举例说明:

C++ 复制代码
QLineEdit *lineEdit = new QLineEdit();
lineEdit->setInputMask(">AA-90-bb-! aa\#H;*");

">AA-90-bb-! aa#H;*"

  • ">":表明后面输入的字母自动转为大写
  • "AA":表明开始必须输入两个字母
  • "-":分割符
  • "9":表示必须输入一个数字
  • "0":表示输入一个数字,或者留空
  • "bb":表示这两位可以留空,或者输入两个二进制字符,即0或1
  • "!":表明停止大小写转换,就是在最开始的">"号不再起作用
  • "aa":表示可以留空,或者输入两个字母
  • "#":表示将"#"号作为分割符,因为"#"号在这里有特殊含义,所以前面要加上""号
  • "H":表明必须输入一个十六进制的字符
  • ";":表示用""号来填充空格

输入验证

在 QLineEdit 种还可以使用验证器(validator)来对输入进行约束。

举例说明:

设置只能输入 100~999 之间的数字。

C++ 复制代码
QLineEdit *lineEdit = new QLineEdit();
QValidator *validator = new QIntValidator(100, 999);
lineEdit->setValidator(validator);

如果想设置更强大的字符约束,就要使用正则表达式了。

C++ 复制代码
QRegExp regExp("-?\\d{1,3}");
QValidator *validator = new QRegExpValidator(regExp, this);

这样就可以实现在开始输入"-"号或者不输入,然后输入1~3个数字的限制

输入掩码与输入验证对比

我想大家可能会有一个疑问,输入掩码与输入验证都是限制输入的,为什么还有两种呢?这两种方法各有特点,适用的场景也有所不同。

  • 输入掩码:是一种通过指定格式模板来限制用户输入内容的方法。输入掩码主要适用于固定格式的输入,例如日期、时间、电话号码等。

  • 输入验证:是一种通过正则表达式定义输入规则的方法,,适用于更复杂、更灵活的输入场景。

自动补全

QLineEdit 种提供了强大的自动补全功能,能够根据用户的部分输入自动推荐匹配内容,提升用户输入效率和体验,这是利用 QCompleter 类实现的。

C++ 复制代码
QLineEdit *lineEdit = new QLineEdit(this);

// 定义字符串列表
QStringList wordList;
wordList << "apple" << "banana" << "cherry" << "date" << "grape";

// 创建 QCompleter
QCompleter *completer = new QCompleter(wordList, this);

// 设置大小写不敏感
completer->setCaseSensitivity(Qt::CaseInsensitive);

// 绑定到 QLineEdit
lineEdit->setCompleter(completer);
相关推荐
??tobenewyorker13 分钟前
力扣打卡第二十一天 中后遍历+中前遍历 构造二叉树
数据结构·c++·算法·leetcode
oioihoii1 小时前
C++11 forward_list 从基础到精通:原理、实践与性能优化
c++·性能优化·list
m0_687399841 小时前
写一个Ununtu C++ 程序,调用ffmpeg API, 来判断一个数字电影的视频文件mxf 是不是Jpeg2000?
开发语言·c++·ffmpeg
看到我,请让我去学习2 小时前
Qt编程-qml操作(js,c++,canvas)
开发语言·qt
Ronin3053 小时前
【C++】类型转换
开发语言·c++
mrbone113 小时前
Git-git worktree的使用
开发语言·c++·git·cmake·worktree·gitab
哈市雪花3 小时前
相机:Camera原理讲解(使用OpenGL+QT开发三维CAD)
qt·3d·交互·相机·图形学·opengl·视角
虾球xz4 小时前
CppCon 2018 学习:EFFECTIVE REPLACEMENT OF DYNAMIC POLYMORPHISM WITH std::variant
开发语言·c++·学习
津津有味道6 小时前
Qt C++串口SerialPort通讯发送指令读写NFC M1卡
linux·c++·qt·串口通信·serial·m1·nfc
让我们一起加油好吗6 小时前
【C++】list 简介与模拟实现(详解)
开发语言·c++·visualstudio·stl·list