当前位置: 首页 > news >正文

Qt 技巧笔记(七) QLineEdit 单行输入控件

方法及灵活运用。

​ 在Qt中,QLineEdit是一个用于输入单行文本的控件,它提供了一个允许用户输入和编辑文本的文本框。该组件是Qt的基础控件之一,通常用于获取用户输入和编辑文本的文本框。是构建用户交互界面的基础组件之一,通常与其它控件一起使用,例如按钮,标签等,以构建完整的用户输入界面。

​ 以下是QLineEdit的一些常用方法和属性配置,以下表格形式进行说明:

方法描述
QLineEdit()构造函数,创建一个空的LineEdit。
clear()清空LineEdit中的文本。
setText(const QString &)设置LineEdit的文本内容。
text() const获取LineEdit的当前文本内容
setPlaceholderText(const QString &)设置占位文本,显示在LineEdit中,提供用户输入提示
placeholderText() const获取占位文本
setMaxLength(int)设置最大输入长度
maxLength() const获取最大输入长度。
setReadOnly(bool)设置LineEdit为只读状态,用户无法编辑
isReadOnly() const检查LineEdit是否为只读状态
setEchoMode(QLineEdit::EchoMode)设置回显模式,用于处理密码等敏感信息的显示。
echoMode() const获取当前的回显模式。
setValidator(QValidator *)设置输入验证器,用于限制输入的内容。
validator() const获取当前的输入验证器。
inputMask() const获取当前的输入掩码。
undo()撤销上一次操作。
redo()重做上一次撤销的操作。
cut()剪切当前选中的文本。
copy()复制当前选中的文本。
paste()粘贴剪切板的内容。
selectAll()选中LineEdit中的所有文本。
deselect()取消文本的选择状态。

这些方法提供了QLineEdit的基本功能,包括文本的设置,获取,清空,以及一些编辑和格式化的操作。具体使用时可以根据需求选择合适的方法。

重要信号及说明

属 性说 明
void cursorPositionChanged(int old, int new)当⿏标移动时发出此信号,old为先前的位置,new为新位置
void editingFinished()当按返回或者回⻋键时,或者⾏编辑失去焦点时,发出此信号;
void returnPressed()当返回或回⻋键按下时发出此信号.如果设置了验证器, 必须要验证通过, 才能触发.
void selectionChanged()当选中的⽂本改变时,发出此信号。
void textChanged(const QString &text)当QLineEdit中的⽂本改变时,发出此信号,text是新的⽂本。代码对⽂本的修改能够触发这个信号.
void textEdited(const QString &text))当QLineEdit中的⽂本改变时,发出此信号,text是新的⽂本。代码对⽂本的修改不能触发这个信号.

枚举:QLineEdit::EcoMode 描述输入框如何显示其内容。

常量描述
QLineEdit::Normal0正常显示输入的字符,默认选项。
QLineEdit::NoEcho1不显示任何输入,常用于密码类型,其密度长度都需要保密的时候。
QLineEdit::Password2显示平台相关的密码掩码字符,而不是实际的字符输入
QLineEdit::PasswordEchoOnEdit3在编辑的时候显示字符,负责显示密度类型。

一、QLineEdit控件常用属性设置详解

1.基本文本属性

QLineEdit 提供了多种方法来设置和获取文本内容:

// 设置文本内容 lineEdit->setText("Hello, Qt"); // 获取文本内容 QString text=lineEdit->text();

QLinedit 设置只读模式

// 设置为只读模式 lineEdit->setReadOnly(true); // 获取是否为只读模式 bool isReadOnly= lineEdit->isReadOnly();

QLineEdit 文本最大长度限制,使用maxLength()函数可以限制用户输入的最大字符数:

// 获取当前设置的最大长度 int maxLen = lineEdit->maxLength(); // 设置最大长度为10个字符 lineEdit->setMaxLength(10);

这在需要限制输入长度的场景非常有用,如手机号码、邮政编码等固定长度的输入。

QLineEdit的站位文本:占位文本是当输入框为空时显示的提示文本,它不会作为实际内容:

// 设置占位文本 lineEdit->setPlaceholderText("请输入用户名...");

2. 显示模式属性

通过设置回显模式,可以控制输入文本的显示方式,这在密码输入等场景中特别有用:

// 设置回显模式 // QLineEdit::Normal - 正常显示输入的字符(默认) // QLineEdit::NoEcho - 不显示任何内容,但仍然可以复制 // QLineEdit::Password - 显示为密码字符(通常为*或●) // QLineEdit::PasswordEchoOnEdit - 编辑时显示正常字符,失去焦点后显示为密码字符 lineEdit->setEchoMode(QLineEdit::Password);

这种属性设置使得QLineEdit可以灵活处理各种敏感信息的输入需求

3.输入验证属性

输入掩码是一种强大的输入格式化工具,可以强制用户按照特定格式输入:

// 设置电话号码输入掩码(中国格式) lineEdit->setInputMask("+86 000 0000 0000"); // 设置日期输入掩码 lineEdit->setInputMask("0000-99-99"); // 清除输入掩码 lineEdit->setInputMask("");

输入掩码可以确保用户输入的数据格式正确,减少数据验证的工作量.

验证器可以更灵活地控制用户输入的内容:

// 整数验证器(0-100) QIntValidator *intValidator = new QIntValidator(0, 100, this); lineEdit->setValidator(intValidator); // 浮点数验证器 QDoubleValidator *doubleValidator = new QDoubleValidator(0.0, 100.0, 2, this); lineEdit->setValidator(doubleValidator); // 正则表达式验证器(只允许输入字母和数字) QRegularExpressionValidator *regexValidator = new QRegularExpressionValidator(QRegularExpression("^[A-Za-z0-9]+$"), this); lineEdit->setValidator(regexValidator);

通过验证器,可以确保用户输入符合特定规则,如只能输入数字、英文字母等

二、文本对齐方式解决

​ 文本对齐方式决定了QLineEdit内部文本的显示位置,通过setAlignment()函数进行设置:

1. 水平对齐方式

// 水平左对齐(默认) lineEdit->setAlignment(Qt::AlignLeft); // 水平居中对齐 lineEdit->setAlignment(Qt::AlignHCenter); // 水平右对齐 lineEdit->setAlignment(Qt::AlignRight); // 水平两端对齐 lineEdit->setAlignment(Qt::AlignJustify);

2.垂直对齐方式

// 垂直上对齐 lineEdit->setAlignment(Qt::AlignTop); // 垂直居中对齐(默认) lineEdit->setAlignment(Qt::AlignVCenter); // 垂直下对齐 lineEdit->setAlignment(Qt::AlignBottom);

3.组合对齐方式

可以同时设置水平和垂直对齐:

// 文本居中显示 lineEdit->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); // 文本右下角显示 lineEdit->setAlignment(Qt::AlignRight | Qt::AlignBottom);

文本对齐属性(alignment)表示显示文本的对齐方式,通过这些设置可以创建更加美观和用户友好的界面。

三、正则化表达式控制详解

​ 正则表达式是文本处理的强大工具,在QLineEdit中可以通过多种方式应用正则表达式来控制输入。

1. 使用QRegularExpressionValidator

// 只允许输入电子邮件地址 QRegularExpressionValidator *emailValidator = new QRegularExpressionValidator( QRegularExpression(R"([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})"), this ); lineEdit->setValidator(emailValidator); // 只允许输入IP地址 QRegularExpressionValidator *ipValidator = new QRegularExpressionValidator( QRegularExpression(R"(^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$)"), this ); lineEdit->setValidator(ipValidator);

2. 使用QInputMask结合正则表达式

虽然输入掩码本身不直接支持正则表达式,但可以通过组合使用实现更复杂的输入控制:

// 创建一个自定义的输入验证器类 class CustomValidator : public QValidator { public: explicit CustomValidator(QObject *parent = nullptr) : QValidator(parent) {} State validate(QString &input, int &pos) const override { QRegularExpression regex("^[A-Za-z0-9]+$"); if (regex.match(input).hasMatch()) { return Acceptable; } return Intermediate; } }; // 使用自定义验证器 lineEdit->setValidator(new CustomValidator(this));

3. 实时正则匹配反馈

可以通过信号槽机制实现实时正则匹配反馈:

// 连接textChanged信号 connect(lineEdit, &QLineEdit::textChanged, [](const QString &text) { QRegularExpression regex("^[A-Za-z0-9]+$"); if (regex.match(text).hasMatch()) { qDebug() << "输入符合要求"; lineEdit->setStyleSheet(""); // 清除样式 } else { qDebug() << "输入不符合要求"; lineEdit->setStyleSheet("background-color: #ffcccc;"); // 设置错误样式 } });

通过这些正则表达式控制技术,可以确保用户输入的数据格式正确,提高数据质量和用户体验。

四、样式设置详解

​ QSS(Qt Style Sheets)是Qt提供的样式表功能,类似于网页开发中的CSS,可以用来定制QLineEdit的外观。

1. 基本样式设置

// 设置背景色 lineEdit->setStyleSheet("background-color: #f0f0f0;"); // 设置文本颜色 lineEdit->setStyleSheet("color: #333333;"); // 设置边框 lineEdit->setStyleSheet("border: 1px solid #cccccc;"); // 设置圆角边框 lineEdit->setStyleSheet("border: 1px solid #cccccc; border-radius: 5px;"); // 设置内边距 lineEdit->setStyleSheet("padding: 5px;");

2. 焦点状态样式

// 焦点状态样式 lineEdit->setStyleSheet( "QLineEdit {" " background-color: #ffffff;" " border: 1px solid #cccccc;" " border-radius: 3px;" " padding: 5px;" "}" "QLineEdit:focus {" " border: 1px solid #0078d7;" " background-color: #f0f8ff;" "}" );

3. 只读状态样式

// 只读状态样式 lineEdit->setStyleSheet( "QLineEdit {" " background-color: #f9f9f9;" "}" "QLineEdit[readOnly=\"true\"] {" " background-color: #eeeeee;" " color: #666666;" "}" );

4. 错误状态样式

// 错误状态样式 lineEdit->setStyleSheet( "QLineEdit {" " border: 1px solid #cccccc;" "}" "QLineEdit.error {" " border: 1px solid #ff0000;" " background-color: #ffeeee;" "}" ); // 动态设置错误状态 lineEdit->setProperty("error", true); lineEdit->style()->unpolish(lineEdit); lineEdit->style()->polish(lineEdit); lineEdit->update();

5. 高级样式技巧

5.1 渐变背景
// 设置渐变背景 lineEdit->setStyleSheet( "QLineEdit {" " background: qlineargradient(x1:0, y1:0, x2:0, y2:1, " " stop:0 #f6f7fa, stop:1 #dadbde);" "}" );
5.2 自定义占位符文本样式
// 自定义占位符文本样式 lineEdit->setStyleSheet( "QLineEdit {" " color: #333333;" "}" "QLineEdit::placeholder {" " color: #999999;" "}" );
5.3 图标装饰
// 添加左侧搜索图标 lineEdit->setStyleSheet( "QLineEdit {" " border: 1px solid #cccccc;" " padding-left: 20px;" " background-image: url(:/images/search.png);" " background-repeat: no-repeat;" " background-position: center left;" "}" );

过这些样式设置技巧,可以创建出美观且符合品牌风格的QLineEdit控件,提升应用程序的整体用户体验。

五、综合应用示例

下面是一个综合运用上述知识的示例,创建一个功能完善的用户名输入框:

// 创建用户名输入框 QLineEdit *usernameEdit = new QLineEdit(this); // 设置基本属性 usernameEdit->setPlaceholderText("请输入用户名(3-16位字母、数字或下划线)"); usernameEdit->setMaxLength(16); // 设置验证器 QRegularExpressionValidator *usernameValidator = new QRegularExpressionValidator( QRegularExpression("^[a-zA-Z0-9_]{3,16}$"), this ); usernameEdit->setValidator(usernameValidator); // 设置对齐方式 usernameEdit->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); // 设置样式 usernameEdit->setStyleSheet( "QLineEdit {" " border: 1px solid #cccccc;" " border-radius: 4px;" " padding: 5px 8px;" " background-color: #ffffff;" "}" "QLineEdit:focus {" " border: 1px solid #0078d7;" " background-color: #f0f8ff;" "}" "QLineEdit[error=\"true\"] {" " border: 1px solid #ff0000;" " background-color: #ffeeee;" "}" ); // 连接信号槽 connect(usernameEdit, &QLineEdit::textChanged, this, [usernameEdit](const QString &text) { QRegularExpression regex("^[a-zA-Z0-9_]{3,16}$"); if (regex.match(text).hasMatch()) { usernameEdit->setProperty("error", false); } else { usernameEdit->setProperty("error", true); } usernameEdit->style()->unpolish(usernameEdit); usernameEdit->style()->polish(usernameEdit); usernameEdit->update(); });

六、总 结

QLineEdit作为Qt框架中最常用的控件之一,通过灵活的属性设置、文本对齐方式、正则表达式控制和样式设置,可以满足各种输入场景的需求。掌握这些技巧,可以帮助开发者创建出更加用户友好、功能完善的用户界面。

http://www.jsqmd.com/news/552127/

相关文章:

  • 英文 SEO 优化服务如何提高网站在国外的曝光度
  • 终极指南:如何用VideoDownloadHelper快速下载网页视频
  • Go Channel 并发通信实战
  • Arduino控制CL57R闭环步进驱动器实战指南
  • 《QGIS快速入门与应用基础》245:单个元素选择与拖拽
  • 小阔科技冲刺港股:年营收25亿 亏1825万 派息1.3亿
  • 2025年华为HCIE-Datacom考试变革:机遇与挑战并存
  • [深度剖析] Unity资产修改难题:MonoBehaviour序列化异常解决方案
  • 新手友好:通过快马生成带详解的nodepad项目轻松入门Web开发
  • SOONet模型IDE高效开发配置:使用IntelliJ IDEA进行Python项目调试
  • OSEK-NM逻辑环构建与状态机解析:从概念到实现
  • 单片机红外遥控系统设计与NEC协议实现
  • 代码下载总卡顿?这款工具让GitHub访问提速10倍的秘密
  • SPI通信原理与多从机配置实战
  • OpenClaw家庭相册:Qwen3-VL:30B自动识别人物与场景分类照片
  • 突破原厂限制:用开源相机工具解锁Sony相机7大隐藏功能
  • 突破Photoshop性能瓶颈:揭秘5种图层导出加速黑科技
  • STM32智能单车锁系统设计与实现
  • 《QGIS快速入门与应用基础》246:多个元素批量选择(Shift+点击)
  • 如何用桌面管理效率工具NoFences打造井井有条的数字工作空间?
  • GitOps实战:利用GitLab CI与Argo CD构建高效Kubernetes交付流水线
  • Go 协程池任务调度设计思路
  • PCU9669 LED驱动库:Mini Board嵌入式快速验证方案
  • 【专栏二:深度学习06】-【一张图讲清楚:训练到底跑了多少次?Batch、Epoch、Iteration 全解析】
  • 解决设计效率难题的8个创新方案:让Illustrator自动化工具重塑你的工作流
  • 2026年长沙挖机出租、拆除、垃圾清运厂家推荐排行榜:专业拆除、专业砸墙、挖机租赁、专业高效合规、覆盖全区域工程服务解决方案 - 海棠依旧大
  • 让ai安装ai:使用快马平台智能分析环境并自动生成最优dify部署与调优方案
  • wan2.1-vae国产化适配:在昇腾910B+MindSpore环境下的移植可行性分析
  • 从LeetCode实战出发:整数划分的三种变体(限制重复、奇偶性、输出方案)及Python解法
  • Redis数值类型转换陷阱:从Integer到Long的序列化问题解析