QLineEdit+QSS

QLineEdit

多了一些新的花样:

  • selection-color

文本选中的颜色

  • selection-background-color

文本选中的背景颜色

  • lineedit-password-character

密码显示的字符

  • lineedit-password-mask-delay

输入密码后延迟多久显示密码字符

样式一 简约派

cpp 复制代码
QLineEdit {
    background-color: transparent;
    border: none;
    border-bottom: 2px solid #e0e0e0;
    padding: 5px;
    font-size: 22px;
    color: #333333;
}
QLineEdit:hover,
QLineEdit:focus {
    border-bottom-color: #4d90fe;
}

稍微改改的话,

通常适用于大多数场景。

样式二 全边框

cpp 复制代码
QLineEdit {
    background-color: white;
    border: 1px solid #e0e0e0;
    border-radius: 4px;
    padding: 5px;
    font-size: 22px;
    color: #606266;
    selection-color: white;           /* 选中文本字体颜色 */
    selection-background-color: #4d90fe; /* 选中文本背景颜色 */
}
QLineEdit:hover{
border-color: #c0c4cc;
}
QLineEdit:focus {
    border-color: #4d90fe;
    background-color: #f8f8f8;
}

selection-color

selection-background-color

设置选中字体和字体背景颜色,

只是用到配色和系统默认差别不大

placeholdertext

占位字符的颜色

qt6.5才能支持呢

所以前面的版本就需要通过QPalette控制啦

cpp 复制代码
QPalette palette = ui->lineEdit->palette();
    // 设置占位文本颜色为浅灰色
    palette.setColor(
        QPalette::PlaceholderText, 
        QColor(210, 210, 210)
    );
    ui->lineEdit->setPalette(palette);

样式三 它来了

cpp 复制代码
QLineEdit {
    background-color: white;
    border: 1px solid #e0e0e0;
    border-radius: 20px;
    padding: 5px;
    font-size: 22px;
    color: #606266;
    selection-color: white;           
    selection-background-color: #4d90fe;
    padding: 0 34 0 34;
    lineedit-password-character: 42;
    lineedit-password-mask-delay: 800;
}
QLineEdit:hover{
    border-color: #c0c4cc;
}
QLineEdit:focus {
    border-color: #4d90fe;
    background-color: #f8f8f8;
}
QLineEdit QToolButton#eye{
border-image: url(:/images/4.png);
}
QLineEdit QToolButton#eye:hover,
QLineEdit QToolButton#eye:checked{
border-image: url(:/images/5.png);
}
QLineEdit QToolButton#search{
border-image: url(:/images/6.png);
}

感觉一下多了好多,一个个得来:

padding: 0 34 0 34

为按钮腾出空间,左边34 右边34
lineedit-password-character: 42

密码符号用✳
lineedit-password-mask-delay: 800

延迟800毫秒明文变✳

接下来就是关键的关键,

怎么把小图标放进入呢!!

虽然QLineEdit提供了addAction,

但是它添加容易,操作难呐。

不如我们自己弄个按钮"嵌"进去。

以下是代码实现

cpp 复制代码
//按钮图标
    QToolButton* btnSearch = new QToolButton(0);
    connect(btnSearch, &QToolButton::clicked, this, []{
        QMessageBox::information(0, "提示", "已自动匹配到你的银行账号!");
    });
    btnSearch->setObjectName("search");
    btnSearch->setCursor(Qt::PointingHandCursor);
    btnSearch->setFixedSize(16,16);
    QToolButton* btnEye = new QToolButton(0);
    connect(btnEye, &QToolButton::toggled, this, [this](bool checked){
        if(checked)
            ui->lineEdit_3->setEchoMode(QLineEdit::Normal);
        else
            ui->lineEdit_3->setEchoMode(QLineEdit::Password);
    });
    btnEye->setCheckable(true);
    btnEye->setObjectName("eye");
    btnEye->setCursor(Qt::PointingHandCursor);
    btnEye->setFixedSize(16,16);
    QHBoxLayout* layout = new QHBoxLayout(ui->lineEdit_3);
    layout->addWidget(btnSearch);
    layout->addSpacerItem(new QSpacerItem(20,20,QSizePolicy::Expanding));
    layout->addWidget(btnEye);
    layout->setContentsMargins(16, 0, 16, 0);
    layout->setSpacing(0);

从上面的代码,我们看到,

两个按钮是通过水平布局的方式,

作为QLineEdit的子控件放进去的。

有个关键点在于:

setObjectName

给按钮设置个ID,

以便QSS能区分按钮谁是谁。

cpp 复制代码
QLineEdit QToolButton#eye{
border-image: url(:/images/4.png);
}
QLineEdit QToolButton#eye:hover,
QLineEdit QToolButton#eye:checked{
border-image: url(:/images/5.png);
}
QLineEdit QToolButton#search{
border-image: url(:/images/6.png);
}
相关推荐
沫璃染墨19 小时前
《Qt从零入门系列(十四):QThread多线程详解——从线程创建到客户端阻塞处理》
开发语言·c++·笔记·qt·ui·交互·线程
代钦塔拉20 小时前
【C++/Qt 进阶】设计模式系列(5):适配器模式——给“不兼容的接口“贴一层翻译膜
c++·qt·设计模式
把我格子衫拿来1 天前
VTK 9.5 与 Qt 6 联合开发:从嵌入三维窗口到可维护的桌面架构
c++·python·qt·vtk·三维可视化
把我格子衫拿来2 天前
VTK 与 Qt 的 CMake 工程怎么组织?模块、工具链与二进制兼容排错
c++·qt·vtk·cmake·工程实践
代钦塔拉2 天前
【C++/Qt 进阶】设计模式系列(4):原型模式——用“克隆“代替“重新构造“
c++·qt·设计模式
Python图像识别2 天前
56-【2027毕设】YOLO11X光安检危险物品检测系统 - Python完整源码+PyQt5界面+训练模型+数据集
python·qt·课程设计
把我格子衫拿来2 天前
鼠标点到哪里才算选中?Qt 与 VTK 的拾取坐标、DPI 与体素定位
python·qt·vtk·坐标变换·三维交互
Lhan.zzZ2 天前
Qt WebEngineView 在 Linux 上无法加载网页:从“看不见 HTML“到“禁用沙箱“
linux·c++·qt
Quz3 天前
QML TabBar 标签栏交互效果合集
qt·动画·qml
zhanghaha13143 天前
Qt 工程实例:逐词逐句保姆级讲解
qt