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);
}
相关推荐
韭菜钟1 小时前
在Qt中实现mqtt客户端
开发语言·qt
Simple_core2 小时前
Qt自带的虚拟键盘--悬浮键盘
qt
大大菜鸟一枚2 小时前
ARM交叉编译环境配置与Qt依赖库部署指南
开发语言·arm开发·qt
起个名字费劲死了3 小时前
基于Mingw64 tesseract 实现英文字符和数字识别
c++·qt·字符识别
扶尔魔ocy3 小时前
C/C++ 聊聊结构体、指针、类
c++·qt·
凯子坚持 c3 小时前
Qt 6.7.3连接远程MySQL数据库(保姆级教程)
数据库·qt·mysql
枫叶丹44 小时前
【Qt开发】Qt窗口(六) -> QMessageBox 消息对话框
c语言·开发语言·数据库·c++·qt·microsoft
LNN202216 小时前
Qt 5.8.0 下实现触摸屏热插拔功能的探索与实践(3)
开发语言·qt