QLineEdit 单行输入控件

张开发
2026/4/3 14:43:27 15 分钟阅读
QLineEdit 单行输入控件
Qt是一个跨平台C图形界面开发库利用Qt可以快速开发跨平台窗体应用程序在Qt中我们可以通过拖拽的方式将不同组件放在指定的位置实现图形化开发的方便了开发效率本章将重点介绍LineEdit单行输入框组件的常用方法及灵活运用。​ 在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 textlineEdit-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;); // 设置错误样式 } });通过这些正则表达式控制技术可以确保用户输入的数据格式正确提高数据质量和用户体验。四、样式设置详解​ QSSQt 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框架中最常用的控件之一通过灵活的属性设置、文本对齐方式、正则表达式控制和样式设置可以满足各种输入场景的需求。掌握这些技巧可以帮助开发者创建出更加用户友好、功能完善的用户界面。

更多文章