如果说按钮是界面的“嘴巴”——负责执行动作,那输入框就是界面的“耳朵”——负责倾听用户。一个软件有没有质感,看它的输入框就知道了。
不信你回想一下:那些看起来高级的软件,输入框是不是都有圆角、有焦点高亮、有舒适的留白?而那些土土的软件,输入框往往就是一条方方正正的线,甚至连边框都没有好好处理过。文章源自网吧系统维护-https://www.58pxe.com/12963.html
今天我们把 QLineEdit 一次讲透。文章源自网吧系统维护-https://www.58pxe.com/12963.html
一、输入框的底子——基础样式
Qt 默认的 QLineEdit 长什么样?就是一条灰色的凹下去的边框,里面套着一个白底——说不上难看,但也绝对谈不上好看。文章源自网吧系统维护-https://www.58pxe.com/12963.html
第一步很简单,给它一个干净的底子:文章源自网吧系统维护-https://www.58pxe.com/12963.html
QLineEdit
{
border: 1px solid #dcdfe6;
border-radius: 6px;
padding: 8px 12px;
background: white;
font-size: 14px;
color: #303133;
}
这里做了几件事:把边框换成细灰色、加了圆角、加了内边距让文字不贴边。
效果立马不一样:文章源自网吧系统维护-https://www.58pxe.com/12963.html
文章源自网吧系统维护-https://www.58pxe.com/12963.html
二、Placeholder 样式——提示文字也要讲究
很多开发者会设置 setPlaceholderText("请输入用户名"),但从来不管这个提示文字长什么样。默认的灰色在深色背景下可能看不清,在浅色背景下又太刺眼。文章源自网吧系统维护-https://www.58pxe.com/12963.html
其实 QSS 专门有一个伪元素来控制占位符:文章源自网吧系统维护-https://www.58pxe.com/12963.html
QLineEdit::placeholder
{
color: #a8abb2;
font-size: 13px;
}
如果你想让提示文字更柔和一点,还可以加个斜文章源自网吧系统维护-https://www.58pxe.com/12963.html
QLineEdit::placeholder
{
color: #a8abb2;
font-style: italic;
}
这样一来,提示文字既不会喧宾夺主,又能清晰地告诉用户该填什么。文章源自网吧系统维护-https://www.58pxe.com/12963.html
三、Focus 高亮效果——用户知道自己在哪
这是很多人最容易忽略的一点。文章源自网吧系统维护-https://www.58pxe.com/12963.html
当用户点击输入框准备输入时,输入框应该给一个明确的视觉反馈——告诉他“你已经聚焦到这里了”。现代软件的做法通常是:边框变色 + 轻微发光。文章源自网吧系统维护-https://www.58pxe.com/12963.html
QLineEdit:focus
{
border: 1px solid #409EFF;
box-shadow: 0 0 0 3px rgba(64, 158, 255, 0.15);
}
box-shadow 的最后一个参数是透明度,数值越小越淡。这个发光效果会让输入框看起来像是“亮了起来”,体验非常微妙但很重要。文章源自网吧系统维护-https://www.58pxe.com/12963.html
也有人喜欢更简洁的方式——只改变边框颜色,不加阴影:文章源自网吧系统维护-https://www.58pxe.com/12963.html
QLineEdit:focus
{
border: 1px solid #409EFF;
background: #f0f7ff;
}
两种风格都行,看你的整体设计调性。文章源自网吧系统维护-https://www.58pxe.com/12963.html
四、密码框——安全也要好看
密码输入框默认显示的是小黑点(•),这没什么问题。但有些场景下,你可能想换成星号(*),或者想改变密文字符的样式。文章源自网吧系统维护-https://www.58pxe.com/12963.html
QSS 提供了 lineedit-password-character 属性文章源自网吧系统维护-https://www.58pxe.com/12963.html
QLineEdit[echoMode="2"]
{
lineedit-password-character: 42; /* 42 对应 ASCII 码的 '*' */
}
echoMode="2" 对应的是 QLineEdit::Password 模式。如果你想换成井号(#),就改成 35。
还有一个实用的小技巧:密码框的密文字符延迟显示。Qt 提供了
lineedit-password-mask-delay 属性,可以控制输入后多久才变成密文。默认是 0,也就是立即变密文。你可以改成 500(毫秒),让用户输入时先看到明文半秒钟再变密文,体验会好很多:文章源自网吧系统维护-https://www.58pxe.com/12963.html
QLineEdit[echoMode="2"]
{
lineedit-password-character: 9679; /* 默认圆点 */
lineedit-password-mask-delay: 500;
}
五、搜索框——加个图标立刻专业
搜索框是输入框里最常见的一种特殊形态。一个带放大镜图标的搜索框,用户一看就知道是干嘛的,根本不需要文字提示。文章源自网吧系统维护-https://www.58pxe.com/12963.html
实现方式有两种。文章源自网吧系统维护-https://www.58pxe.com/12963.html
方式一:用 QSS 的背景图
QLineEdit#searchBox
{
background: #f5f7fa;
background-image: url(:/icons/search.svg);
background-repeat: no-repeat;
background-position: left 10px center;
border: 1px solid #dcdfe6;
border-radius: 16px;
padding: 6px 12px 6px 36px; /* 左侧留出图标的空位 */
font-size: 14px;
}
方式二:用 QAction 添加图标
QAction *searchAction = new QAction(this);
searchAction->setIcon(QIcon(":/icons/search.svg"));
ui->lineEdit->addAction(searchAction, QLineEdit::LeadingPosition);
这种方式更灵活,因为 QAction 可以响应点击事件——比如点击搜索图标触发搜索。
六、带图标的输入框——不只是搜索
除了搜索框,登录界面经常出现“用户名 + 小头像”、“密码 + 小锁头”这样的组合。
做法和搜索框类似,用 background-image 加 background-position 控制图标位置:
QLineEdit#username
{
background: white;
background-image: url(:/icons/user.svg);
background-repeat: no-repeat;
background-position: left 12px center;
border: 1px solid #dcdfe6;
border-radius: 6px;
padding: 8px 12px 8px 38px;
}
QLineEdit#password
{
background: white;
background-image: url(:/icons/lock.svg);
background-repeat: no-repeat;
background-position: left 12px center;
border: 1px solid #dcdfe6;
border-radius: 6px;
padding: 8px 12px 8px 38px;
}
这样每个输入框都有自己的小图标,用户扫一眼就知道该填什么,不需要靠 placeholder 文字来猜。
七、错误提示样式——优雅地告诉用户“你填错了”
表单验证是绕不开的场景。用户名格式不对、密码太短、邮箱格式错误——这些时候输入框应该给出反馈。
最粗暴的方式是把边框变红:
QLineEdit#username[state="error"]
{
border: 1px solid #F56C6C;
background: #fef0f0;
}
然后在代码里,验证失败时设置属性,并刷新样式
ui->username->setProperty("state", "error");
ui->username->style()->unpolish(ui->username);
ui->username->style()->polish(ui->username);
验证通过后别忘了恢复:
ui->username->setProperty("state", "none");
ui->username->style()->unpolish(ui->username);
ui->username->style()->polish(ui->username);
如果想更细腻一点,还可以在错误状态下改变 placeholder 的颜色,或者加一个红色的感叹号图标:
QLineEdit[state="error"]
{
border: 1px solid #F56C6C;
background: #fef0f0;
background-image: url(:/icons/error.svg);
background-repeat: no-repeat;
background-position: right 10px center;
padding-right: 36px;
}
用户输入错误时,输入框变红 + 右侧出现红色感叹号——这种反馈非常清晰,用户一看就知道“这里出问题了”。
八、禁用与只读状态
禁用和只读是两种不同的状态,但经常被混为一谈。
禁用(disabled) :用户完全无法操作,通常用于条件不满足时的按钮或输入框。
只读(readonly) :用户可以选中和复制文字,但不能修改。
样式上也要区分:
QLineEdit:disabled
{
background: #f5f7fa;
color: #c0c4cc;
border-color: #e4e7ed;
}
QLineEdit:read-only
{
background: #fafafa;
color: #606266;
border-color: #dcdfe6;
}
禁用的输入框看起来更“灰”一些,只读的输入框看起来只是稍微淡了一点,但依然可读。
九、选中文字的颜色
还有一个细节很多人不注意:用户选中输入框里的文字时,背景色是什么?
默认是系统主题色,可能跟你软件的配色完全不搭。
QSS 提供了专门的控制属性
QLineEdit
{
selection-background-color: #409EFF;
selection-color: white;
}
这样用户选中文字时,背景是蓝色,文字是白色,跟你的整体配色保持一致。
十、企业项目输入框规范
和按钮一样,输入框在大项目中也需要统一规范。建议定义以下几种类型:
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
同样的,用动态属性来区分
ui->username->setProperty("status", "normal");
ui->password->setProperty("status", "error");
QSS 里统一处理:
QLineEdit[status="normal"]
{
border: 1px solid #dcdfe6;
border-radius: 6px;
padding: 8px 12px;
background: white;
}
QLineEdit[status="normal"]:focus
{
border-color: #409EFF;
box-shadow: 0 0 0 3px rgba(64, 158, 255, 0.15);
}
QLineEdit[status="error"]
{
border: 1px solid #F56C6C;
background: #fef0f0;
}
QLineEdit[status="error"]:focus
{
border-color: #F56C6C;
box-shadow: 0 0 0 3px rgba(245, 108, 108, 0.15);
}
QLineEdit[status="success"]
{
border: 1px solid #67C23A;
background: #f0f9eb;
}
这样做的好处是:整个项目的输入框风格完全一致,修改规范只需要改一份 QSS 文件。
总结
输入框看似简单,但细节决定成败。一个优秀的 QLineEdit 应该是:
基础干净:有圆角、有留白、不丑陋
反馈清晰:聚焦时高亮、错误时变红、悬停时有反应
功能明确:搜索框有图标、密码框有密文、占位符有样式
规范统一:整个项目的输入框风格一致
把这些做好,你的 Qt 软件离“高级感”就不远了。


评论