发布时间:2026/8/5 5:21:58
Qt 高级编程 039:QLineEdit 样式美化+密码模式+正则校验 Qt 高级编程 039QLineEdit 样式美化密码模式正则校验 前言为什么 QLineEdit 值得你花 10 分钟精读哈喽各位 Qt 小伙伴们 今天咱们来聊一聊 Qt 中最最最常用的控件之一 ——QLineEdit你可能会说“切不就是个输入框吗有啥好讲的” NONONO大错特错❌ 别看 QLineEdit 长得简单里面的水可深着呢你知道 QLineEdit 有多少种状态吗5种你知道 QSS 样式表能玩出多少花样吗N种你知道正则校验有多少坑吗踩过的人都哭了今天这篇文章咱们就从基础属性 → QSS美化 → 密码模式 → 禁用状态 → 正则校验一条龙服务给你安排得明明白白保证你看完之后QLineEdit 玩得比谁都溜Bilibili 同步视频Qt 高级编程 039QLineEdit 样式美化密码模式正则校验️ 一、QLineEdit 基础属性大盘点1.1 只读模式 readOnly —— 只许看不许摸 QLineEdit 的只读属性就像图书馆里的书——你可以翻但不能写两种设置方式任君挑选设置方式操作方法适用场景UI设计器选中控件 → 属性面板 → 勾选readOnly✅静态界面、快速原型代码动态ui-lineEdit-setReadOnly(true);业务逻辑控制、条件切换小Tips只读和禁用是两码事哦只读的文本可以选中复制禁用的话连选都选不了1.2 焦点控制 setFocusPolicy —— 谁是全场焦点还记得咱们之前讲迅雷界面的时候聊过焦点吗没错就是第二章那个QLineEdit 获得焦点后样式会发生变化这就是setFocusPolicy()的功劳// 设置强焦点点击/Tab键都能获得焦点 ui-lineEdit-setFocusPolicy(Qt::StrongFocus); // 不接受焦点点了也白点 ui-lineEdit-setFocusPolicy(Qt::NoFocus);1.3 文本对齐 setAlignment —— 左中右你说了算 文本在输入框里怎么摆左对齐居中右对齐设计器操作选中控件 → 属性面板 →align→ 水平/垂直对齐随便选代码实现// 水平居中 垂直居中 ui-lineEdit-setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); // 右对齐常用于数字输入 ui-lineEdit-setAlignment(Qt::AlignRight | Qt::AlignVCenter);1.4 输入长度限制 —— 多长是个头想限制用户最多输入多少个字符一句话搞定// 最多输入20个字符 ui-lineEdit-setMaxLength(20); 二、QSS 样式表美化让你的输入框颜值爆表2.1 为什么要用 QSSQt 自带的默认样式嘛…怎么说呢…朴素中透着一丝简陋但别怕有了QSSQt Style Sheets咱们分分钟让输入框从土肥圆变成高富帅重要提醒QSS 样式表这玩意儿一般都不是自己敲的都是复制粘贴改参数的谁要是跟你说他是纯手写的那他要么是大神要么是在装X…2.2 完整 QSS 样式模板直接抄作业废话不多说直接上干货/* QLineEdit 基础样式 */ QLineEdit { border: 2px solid #333333; /* 边框2px实线深灰 */ border-radius: 8px; /* 圆角8px圆润不扎手 */ padding: 0px 8px; /* 内边距文字别贴边 */ background-color: #2d2d2d; /* 背景色暗黑风格YYDS */ color: #ffffff; /* 文字颜色白色 */ selection-background-color: #0078d7;/* 选中文本背景色微软蓝 */ font-family: Microsoft YaHei; /* 字体微软雅黑拒绝宋体 */ font-size: 14px; /* 字号14px护眼刚刚好 */ min-height: 50px; /* 最小高度50px大气 */ max-height: 50px; /* 最大高度50px固定高度 */ } /* 鼠标悬浮样式 :hover */ QLineEdit:hover { border: 2px solid #0078d7; /* 悬浮时边框变蓝 */ border-radius: 8px; /* 圆角保持一致 */ background-color: #3a3a3a; /* 背景稍微亮一丢丢 */ color: #0078d7; /* 文字也变蓝呼应感拉满 */ } /* 获得焦点样式 :focus */ QLineEdit:focus { border: 2px solid #0078d7; /* 焦点边框蓝色高亮 */ background-color: #3a3a3a; /* 背景提亮 */ } /* 只读状态 :read-only */ QLineEdit:read-only { border: 2px solid #555555; /* 边框变灰暗示不可编辑 */ background-color: #333333; /* 背景更深封印感 */ color: #888888; /* 文字变灰一眼看穿 */ } /* 禁用状态 :disabled */ QLineEdit:disabled { border: 2px solid #444444; /* 边框更灰 */ background-color: #2a2a2a; /* 背景更暗 */ color: #666666; /* 文字灰到快看不见 */ }2.3 样式效果一览图 ️graph LR A[QLineEditbr/基础状态] --|鼠标移入| B[:hoverbr/悬浮状态] A --|点击获得焦点| C[:focusbr/焦点状态] A --|setReadOnly(true)| D[:read-onlybr/只读状态] A --|setEnabled(false)| E[:disabledbr/禁用状态] style A fill:#2d2d2d,stroke:#333,stroke-width:2px,color:#fff style B fill:#3a3a3a,stroke:#0078d7,stroke-width:2px,color:#0078d7 style C fill:#3a3a3a,stroke:#0078d7,stroke-width:3px,color:#fff style D fill:#333333,stroke:#555,stroke-width:2px,color:#888 style E fill:#2a2a2a,stroke:#444,stroke-width:2px,color:#666五种状态五种心情从活泼的悬浮蓝到灰扑扑的禁用态每一种状态都在跟用户说话 三、密码模式 echoMode你的密码我看不见 3.1 echoMode 是什么echoMode决定了输入的文本怎么显示给用户看。就像你输入密码的时候显示的是 ****** 而不是真实密码3.2 四种模式详解 模式值枚举常量效果说明适用场景0QLineEdit::Normal正常显示输入啥显示啥普通文本输入1QLineEdit::NoEcho完全不显示任何东西Linux 终端输密码那种连字符数都不让你知道 ️2QLineEdit::Password显示密码圆点 •••最常用的密码输入模式 ✅3QLineEdit::PasswordEchoOnEdit编辑时显示字符失去焦点变圆点兼顾安全和确认3.3 代码示例 // 设置为密码模式最常用 ui-lineEdit_password-setEchoMode(QLineEdit::Password); // 切换显示/隐藏密码现在APP都爱这么玩 void MainWindow::on_togglePasswordBtn_clicked() { if (ui-lineEdit_password-echoMode() QLineEdit::Password) { ui-lineEdit_password-setEchoMode(QLineEdit::Normal); // 显示明文 } else { ui-lineEdit_password-setEchoMode(QLineEdit::Password); // 隐藏密码 } }冷知识为什么是模式2而不是模式1因为 NoEcho 模式下你连自己输了几个字符都不知道太反人类了… 所以 Password 模式才是业界标准 四、禁用状态 disabled我躺平了别碰我 4.1 什么时候用禁用状态某些条件不满足时不让用户输入表单提交中防止重复操作展示信息但不允许修改不过这种情况更推荐 readOnly4.2 代码设置// 禁用输入框 ui-lineEdit-setEnabled(false); // 重新启用 ui-lineEdit-setEnabled(true);⚠️友情提示如果只是不让编辑但允许复制优先用 readOnlydisabled 状态下文字都选不了用户体验不太好而且一般禁用的控件干脆直接隐藏算了放那儿灰扑扑的多影响心情… 五、正则表达式校验输入合规性的终极武器 ⚔️重头戏来了这部分是 QLineEdit 最实用也最容易踩坑的地方坐稳扶好5.1 为什么需要正则校验想象一下你让用户输入邮箱结果他给你输了个123456…你让用户输入手机号结果他给你输了abcdefg…♂️这时候就需要正则表达式Regular Expression来救场了它就像一个严格的门卫 不符合规则的输入一律拦在门外5.2 核心类介绍 Qt 提供了完整的正则校验三件套类名作用地位QRegExp/QRegularExpression正则规则本体 大脑负责制定规则QRegExpValidator校验器️ 门卫负责检查输入QLineEdit输入框 大门用户输入的地方5.3 实现流程图 flowchart TD A[用户输入字符] -- B{QRegExpValidatorbr/校验器检查} B --|符合规则| C[允许输入br/显示在输入框] B --|不符合规则| D[拒绝输入br/字符不显示] C -- E[用户按下回车] E -- F{格式完全匹配?} F --|是| G[触发 returnPressed 信号] F --|否| H[不触发信号] style A fill:#e3f2fd,stroke:#2196f3,stroke-width:2px style B fill:#fff3e0,stroke:#ff9800,stroke-width:2px style C fill:#e8f5e9,stroke:#4caf50,stroke-width:2px style D fill:#ffebee,stroke:#f44336,stroke-width:2px style G fill:#e8f5e9,stroke:#4caf50,stroke-width:2px style H fill:#ffebee,stroke:#f44336,stroke-width:2px5.4 邮箱校验完整代码示例 第一步包含头文件 #include QRegExp #include QRegExpValidator #include QMessageBox #include QDebug第二步设置正则校验器 ️void MainWindow::initEmailValidator() { // 邮箱正则表达式从正则生成网站复制的自己写容易翻车... QString emailPattern ^[a-zA-Z0-9_-][a-zA-Z0-9_-](.[a-zA-Z0-9_-])$; // 1. 创建正则对象 QRegExp emailRegExp(emailPattern); // 2. 创建校验器绑定正则规则 QRegExpValidator* emailValidator new QRegExpValidator(emailRegExp, this); // 3. 给输入框设置校验器 ui-lineEdit_email-setValidator(emailValidator); qDebug() 邮箱校验器设置完成; }⚠️踩坑预警正则里的反斜杠在 C 字符串里要写成不然转义失效正则就废了…别问我怎么知道的…第三步按钮点击校验推荐方案 ✅void MainWindow::on_validateBtn_clicked() { QString email ui-lineEdit_email-text(); // 获取校验器 const QRegExpValidator* validator qobject_castconst QRegExpValidator*(ui-lineEdit_email-validator()); if (!validator) { QMessageBox::warning(this, u8警告, u8校验器未设置); return; } int pos 0; QValidator::State result validator-validate(email, pos); // 判断校验结果 switch (result) { case QValidator::Acceptable: // ✅ 格式完全正确 QMessageBox::information(this, u8验证结果, u8 邮箱格式正确); break; case QValidator::Invalid: // ❌ 格式错误 QMessageBox::warning(this, u8验证结果, u8❌ 邮箱格式不正确); break; case QValidator::Intermediate: // ⚠️ 中间状态输入到一半还没输完 QMessageBox::information(this, u8验证结果, u8⏳ 邮箱还没输完呢); break; } }5.5 踩坑记录returnPressed 信号的坑 真实踩坑现场还原最开始我天真地以为绑定returnPressed信号就能判断格式对不对…// 我原本以为这样就能判断了...太傻太天真 connect(ui-lineEdit_email, QLineEdit::returnPressed, this, MainWindow::on_email_returnPressed);结果发现✅ 格式正确的时候按回车 → 信号触发了❌ 格式错误的时候按回车 → 信号根本不触发这就尴尬了…我怎么知道用户是没按回车还是格式不对没触发结论returnPressed信号只有在输入完全符合正则规则时才会触发所以它只能用来处理输入正确后的逻辑不能用来做错误提示5.6 两种方案对比 方案优点缺点推荐指数returnPressed 信号自动触发不用按钮错误时不触发无法提示⭐⭐按钮点击主动校验可控性强正确错误都能处理需要多一个按钮⭐⭐⭐⭐⭐最终结论按钮点击主动校验才是YYDS虽然多了个按钮但用户体验好太多了 六、完整项目代码参考 mainwindow.h#ifndef MAINWINDOW_H #define MAINWINDOW_H #include QMainWindow #include QRegExp #include QRegExpValidator QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent nullptr); ~MainWindow(); private slots: void on_validateBtn_clicked(); // 验证按钮点击 void on_togglePasswordBtn_clicked(); // 密码显示切换 private: Ui::MainWindow *ui; void initLineEdits(); // 初始化所有输入框 void initEmailValidator(); // 初始化邮箱校验器 }; #endif // MAINWINDOW_Hmainwindow.cpp#include mainwindow.h #include ui_mainwindow.h #include QMessageBox #include QDebug MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui-setupUi(this); initLineEdits(); // 初始化输入框样式和属性 initEmailValidator(); // 设置邮箱正则校验 } MainWindow::~MainWindow() { delete ui; } void MainWindow::initLineEdits() { // 第二个输入框只读模式 ui-lineEdit_readonly-setReadOnly(true); ui-lineEdit_readonly-setText(u8我是只读状态点我也没用); // 第三个输入框密码模式 ui-lineEdit_password-setEchoMode(QLineEdit::Password); ui-lineEdit_password-setText(123456); // 第四个输入框禁用模式 ui-lineEdit_disabled-setEnabled(false); ui-lineEdit_disabled-setText(u8我被禁用了躺平中...); // 设置统一对齐方式 ui-lineEdit_normal-setAlignment(Qt::AlignLeft | Qt::AlignVCenter); ui-lineEdit_email-setAlignment(Qt::AlignLeft | Qt::AlignVCenter); qDebug() ✅ 所有输入框初始化完成; } void MainWindow::initEmailValidator() { // 邮箱正则表达式 QString pattern ^[a-zA-Z0-9_-][a-zA-Z0-9_-](.[a-zA-Z0-9_-])$; QRegExp emailRegExp(pattern); QRegExpValidator* validator new QRegExpValidator(emailRegExp, this); ui-lineEdit_email-setValidator(validator); } void MainWindow::on_validateBtn_clicked() { QString email ui-lineEdit_email-text(); const QRegExpValidator* validator qobject_castconst QRegExpValidator*(ui-lineEdit_email-validator()); if (!validator) return; int pos 0; QValidator::State result validator-validate(email, pos); if (result QValidator::Acceptable) { QMessageBox::information(this, u8验证结果, u8 邮箱格式正确); } else if (result QValidator::Invalid) { QMessageBox::warning(this, u8验证结果, u8❌ 邮箱格式不正确); } else { QMessageBox::information(this, u8验证结果, u8⏳ 请输入完整的邮箱地址); } } void MainWindow::on_togglePasswordBtn_clicked() { if (ui-lineEdit_password-echoMode() QLineEdit::Password) { ui-lineEdit_password-setEchoMode(QLineEdit::Normal); } else { ui-lineEdit_password-setEchoMode(QLineEdit::Password); } } 七、知识点总结 mindmap root((QLineEditbr/全掌握)) 基础属性 readOnly 只读 setFocusPolicy 焦点 setAlignment 对齐 setMaxLength 长度限制 QSS样式 基础状态 hover 悬浮 focus 焦点 read-only 只读样式 disabled 禁用样式 密码模式 Normal 明文 NoEcho 不显示 Password 密码圆点 PasswordEchoOnEdit 编辑显示 正则校验 QRegExp 正则规则 QRegExpValidator 校验器 validate() 主动校验 returnPressed 信号坑 按钮校验方案 八、写在最后好啦今天的 QLineEdit 保姆级教程就到这里啦回顾一下咱们都学了啥✅5种状态正常、只读、密码、禁用、正则校验✅QSS美化悬浮、焦点、各种状态一网打尽✅密码模式4种 echoMode 各有千秋✅正则校验踩坑 returnPressed最终按钮方案胜出一句话总结QLineEdit 看似简单实则细节满满掌握了这些技巧你的输入框绝对能成为项目里最靓的仔往期精彩回顾 Qt 迅雷界面复刻教程第二章焦点与样式表的艺术 Qt 样式表 QSS 从入门到精通看这一篇就够了如果这篇文章对你有帮助别忘了点赞 收藏⭐ 评论 三连支持一下哦你的支持就是我更新的最大动力冲鸭

相关新闻

2026/8/5 5:21:57

MacOS开发中SSL证书验证失败:从原理到解决OAuth认证错误

1. 项目概述:一次典型的MacOS环境开发部署踩坑实录最近在MacOS上折腾OpenClaw这个开源项目,想把它跑起来对接Minimax的API,结果在OAuth认证环节直接卡住了,报了个经典的SSL证书错误:minimax oauth failed - unable to …

2026/8/5 5:16:57

北大2篇Skill炸场,Agent彻底进化

一个 Agent 到底凭什么越来越强?有人靠更大的模型,有人靠更多数据,但北京大学连发两篇论文,给出了同一条答案:让 Skill 自己进化。 这两篇都来自北大,一个叫 VeriSkill,管程序验证;一…

2026/8/5 5:16:57

爆火的腾讯WorkBuddy发了篇论文,公开了自家底牌

今天分享一篇腾讯WorkBuddy团队最新发表的论文,他们给自己造的内部尺子,现在把它开源了。 这篇论文不是孤立的学术工作,而是 WorkBuddy 产品工程的副产品——把内部的模型选型评测、Harness 回归测试、任务分布洞察打包成一个开源 Benchmark。…

2026/8/5 6:12:00

前端时间处理实战:从new Date陷阱到服务器时间同步方案

1. 从一次线上故障说起:为什么new Date()不是万能的?那天下午,我正喝着咖啡,突然收到一连串的报警。一个核心的订单结算页面,用户反馈提交订单后显示的“预计送达时间”比实际晚了整整8个小时。这可不是小事&#xff0…

2026/8/5 6:12:00

程序员副业接单平台全解析:从竞标到精英筛选的实战指南

1. 项目概述:程序员副业接单的“寻宝图”干了十几年开发,从刚入行时偷偷摸摸找私活,到现在偶尔接点项目调剂生活,我几乎把市面上能叫得出名字的程序员接单平台都趟了一遍。今天不聊虚的,就从一个老码农的实际体验出发&…

2026/8/5 6:12:00

MAML元学习算法:从原理到实战,实现小样本快速适应

1. 项目概述:从“学会学习”到MAML如果你在机器学习领域待过一段时间,尤其是对模型泛化能力、小样本学习这些话题感兴趣,那么“MAML”这个名字你一定不陌生。它不是一个具体的应用软件,而是一个深刻影响深度学习研究范式的元学习算…

2026/8/5 3:13:11

如何用免费工具突破游戏窗口限制:SRWE完整使用指南

如何用免费工具突破游戏窗口限制:SRWE完整使用指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否遇到过这样的困扰?想为心爱的游戏截图,却发现游戏不支持自定义分辨率…

2026/8/5 0:01:34

三升四,比成绩下滑更可怕的,是孩子开始「认命」

分水岭上,最难的不是翻过去,是孩子不想翻了。八月初了。这两个字,对三升四的家长来说,比任何闹钟都让人清醒。最近的家长群里,气氛明显不一样了。一升二的在关心兴趣班,二升三的在讨论要不要提前学英语。而…

2026/8/5 0:01:34

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:01:34

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/3 22:40:58

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/3 13:26:41

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/3 16:43:13

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…