【三十】【QT开发应用】QSS之控件QLineEdit

QSS(Qt Style Sheets)是一种用于定制 Qt 应用程序中控件外观的样式表语言,类似于 Web 开发中的 CSS。通过 QSS,开发者可以轻松地修改控件的颜色、字体、边框、间距等属性,从而实现个性化的界面设计。对于 QLineEdit 控件,QSS 可以用于设置背景颜色、文本颜色、边框样式、内边距等,提升输入框的视觉效果和用户体验,使得界面更加美观和符合应用需求。

MainWidget.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QRegularExpression>
#include <QRegularExpressionValidator>

#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->lineEdit->setText("Hello LineEdit");
    ui->lineEdit_2->setText("Hello LineEdit");
    ui->lineEdit_3->setText("Hello LineEdit");
    ui->lineEdit_4->setText("Hello LineEdit");


    ui->lineEdit_2->setReadOnly(true);
    ui->lineEdit_3->setEchoMode(QLineEdit::Password);
    ui->lineEdit_4->setDisabled(true);

    QRegularExpression regx("\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\\.)+[A-Za-z]{2,14}");
    QValidator *validator = new QRegularExpressionValidator(regx, ui->lineEdit_5);
    ui->lineEdit_5->setValidator(validator);


    QString qss1=R"(
QLineEdit{
    border: 1px solid #ABCDA0;      /* 边框宽度为1px,颜色为#A0A0A0 */
    border-radius: 3px;         /* 边框圆角 */
    padding-left: 5px;           /* 文本距离左边界有5px */
    background-color: #F2F2F2;     /* 背景颜色 */
    color: #A0A0A0;     /* 文本颜色 */
    selection-background-color: #A0A0A0;     /* 选中文本的背景颜色 */
    selection-color: #F2F2F2;    /* 选中文本的颜色 */
    font-family: "Microsoft YaHei";    /* 文本字体族 */
    font-size: 10pt;    /* 文本字体大小 */
}

QLineEdit:hover { /* 鼠标悬浮在QLineEdit时的状态 */
    border: 1px solid #298DFF;
    border-radius: 3px;
    background-color: #F2F2F2;
    color: #298DFF;
    selection-background-color: #298DFF;
    selection-color: #F2F2F2;
}

QLineEdit[echoMode="2"] { /* QLineEdit有输入掩码时的状态 */
    lineedit-password-character: 9679;
    lineedit-password-mask-delay: 2000;
}

QLineEdit:disabled { /* QLineEdit在禁用时的状态 */
    border: 1px solid #CDCDCD;
    background-color: #CDCDCD;
    color: #B4B4B4;
}

QLineEdit:read-only { /* QLineEdit在只读时的状态 */
    background-color: #CDCDCD;
    color: #F2F2F2;
}
)";

    this->setStyleSheet(qss1);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_btnCheck_clicked()
{
    const QValidator* v = ui->lineEdit_5->validator();
    int pos = 0;

    QString text = ui->lineEdit_5->text();
    if (v->validate(text, pos) != QValidator::Acceptable)
    {
        ui->lineEdit_5->setText(u8"邮箱格式不正确");
    }
    else
    {
        QMessageBox::information(this, u8"标题", u8"邮箱格式正确");
    }
}

在这里插入图片描述

前面四个 QLineEdit 分别用于测试不同的输入框属性配置:

  1. 第一个 QLineEdit:未配置任何特殊属性,保留默认输入行为。
  2. 第二个 QLineEdit:设置为只读属性,用户可以查看内容但无法进行编辑。
  3. 第三个 QLineEdit:配置为密码输入模式,输入内容以掩码字符显示(通常为 ),用于保护敏感信息。
  4. 第四个 QLineEdit:设置为禁用状态,无法接收用户输入或编辑。

最后一个 QLineEdit 用于测试正则表达式验证,以确保输入符合指定的格式规则。

正则表达式

正则表达式代码使用了 QRegularExpressionQRegularExpressionValidator 来验证用户输入的电子邮件格式。这是 QRegularExpressionValidator 的推荐用法,特别是在 Qt 5.15 及更高版本中,取代了旧的 QRegExpValidator

QRegularExpression regx("\\w[-\\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\\.)+[A-Za-z]{2,14}");
// 定义了一个 QRegularExpression 对象,用于匹配电子邮件地址的格式。

QValidator *validator = new QRegularExpressionValidator(regx, ui->lineEdit_5);
// 创建了一个基于 QRegularExpression 的验证器,将其应用到输入框 ui->lineEdit_5。

ui->lineEdit_5->setValidator(validator);
// 设置验证器到 lineEdit_5,确保用户输入的文本必须符合电子邮件地址的格式。

确保头文件已包含:
你需要包含 QRegularExpressionQRegularExpressionValidator 的头文件:

#include <QRegularExpression>
#include <QRegularExpressionValidator>

槽函数

这段代码的功能是,当用户点击按钮时,程序会验证 lineEdit_5 输入框中的文本是否符合之前设置的电子邮件格式。如果验证失败,程序会提示“邮箱格式不正确”,否则会显示“邮箱格式正确”的消息框。

void MainWindow::on_btnCheck_clicked()
{
    // 获取 lineEdit_5 的验证器
    const QValidator* v = ui->lineEdit_5->validator();
    
    // pos 是一个传递给 validate 函数的整型值,标识验证的位置。
    int pos = 0;

    // 获取用户输入的文本
    QString text = ui->lineEdit_5->text();
    
    // 如果验证器的 validate 函数返回的不是 Acceptable(即输入格式不正确)
    if (v->validate(text, pos) != QValidator::Acceptable)
    {
        // 设置输入框的文本为 "邮箱格式不正确"
        ui->lineEdit_5->setText(u8"邮箱格式不正确");
    }
    else
    {
        // 显示信息框,提示用户 "邮箱格式正确"
        QMessageBox::information(this, u8"标题", u8"邮箱格式正确");
    }
}

QSS

1. 默认状态下的 QLineEdit 样式

QLineEdit{
    border: 1px solid #ABCDA0;      /* 边框宽度为1px,颜色为#ABCDA0 */
    border-radius: 3px;             /* 边框圆角,半径为3px */
    padding-left: 5px;              /* 文本距离左边框有5px的内边距 */
    background-color: #F2F2F2;      /* 背景颜色为浅灰色 */
    color: #A0A0A0;                 /* 文本颜色为灰色 */
    selection-background-color: #A0A0A0;  /* 选中文本的背景颜色为灰色 */
    selection-color: #F2F2F2;       /* 选中文本的颜色为浅灰色 */
    font-family: "Microsoft YaHei"; /* 文本字体设置为微软雅黑 */
    font-size: 10pt;                /* 文本字体大小设置为10pt */
}

这部分定义了 QLineEdit 在默认状态下的样式:

  • 边框为 1px 宽度,颜色为 #ABCDA0
  • 边框的圆角半径为 3px,内边距为 5px,使得文本与左侧边框有一定距离。
  • 背景颜色为浅灰色 #F2F2F2,文本颜色为灰色 #A0A0A0
  • 选中文本时,背景颜色为灰色,文本颜色为浅灰色。
  • 使用了微软雅黑字体,字体大小为 10pt。

2. 悬浮状态(鼠标悬停)下的 QLineEdit 样式

QLineEdit:hover {
    border: 1px solid #298DFF;      /* 悬浮时,边框颜色变为蓝色 */
    border-radius: 3px;             /* 保持圆角 */
    background-color: #F2F2F2;      /* 背景颜色保持不变 */
    color: #298DFF;                 /* 文本颜色变为蓝色 */
    selection-background-color: #298DFF; /* 选中文本的背景颜色变为蓝色 */
    selection-color: #F2F2F2;       /* 选中文本的颜色保持不变 */
}
  • 当鼠标悬浮在 QLineEdit 上时,边框颜色变为蓝色 #298DFF
  • 文本颜色也变为蓝色,选中文本的背景颜色变为蓝色。

3. 有掩码输入时的 QLineEdit 样式

QLineEdit[echoMode="2"] {
    lineedit-password-character: 9679; /* 输入时显示密码字符(●) */
    lineedit-password-mask-delay: 2000; /* 输入字符时,延迟2000毫秒(2秒)后转换为掩码字符 */
}
  • QLineEditechoMode 设置为 2 时(即密码模式),输入的字符会被显示为 9679 这个 Unicode 字符()。
  • 设置了输入字符在 2000 毫秒(2 秒)之后,显示为掩码字符

4. 禁用状态下的 QLineEdit 样式

QLineEdit:disabled {
    border: 1px solid #CDCDCD;      /* 禁用时边框颜色变为浅灰色 */
    background-color: #CDCDCD;      /* 背景颜色变为浅灰色 */
    color: #B4B4B4;                 /* 文本颜色变为更浅的灰色 */
}
  • QLineEdit 被禁用时,边框和背景颜色变为更浅的灰色,文本颜色也变为浅灰色。

5. 只读状态下的 QLineEdit 样式

QLineEdit:read-only {
    background-color: #CDCDCD;      /* 背景颜色变为浅灰色 */
    color: #F2F2F2;                 /* 文本颜色变为浅灰色 */
}
  • QLineEdit 设置为只读时,背景颜色变为浅灰色,文本颜色为浅灰色 #F2F2F2

知识点

QLineEdit 是 Qt 框架中常用的单行文本输入控件,广泛用于需要用户输入短文本的场景,如登录框、搜索框、表单等。下面详细介绍它的常用方法和属性,并延伸相关知识点,以便更好地理解和应用。

1. setText()

setText() 方法用于设置文本框中的内容。可以动态更新用户界面中的输入框文本内容。

用法:

lineEdit->setText("Hello World");
  • 这个方法直接修改了 QLineEdit 显示的文本。
  • 常用于初始化界面时给输入框一个默认值,或根据用户的输入进行更新。

扩展:

  • 结合 text() 方法,可以获取用户输入的内容:
    QString inputText = lineEdit->text();
    

2. setReadOnly()

setReadOnly() 用于设置文本框是否为只读模式。在只读模式下,用户不能编辑内容,但内容仍然可以被复制。

用法:

lineEdit->setReadOnly(true);
  • 当参数为 true 时,QLineEdit 进入只读模式。
  • 常用于显示不可修改的文本信息,如系统生成的 ID,或需要防止用户误修改的内容。

扩展:

  • 常与表单数据展示结合使用,当用户仅需查看某些信息而不需要进行修改时,设置为只读模式。
  • 还可以使用 setEnabled(false)setDisabled(true) 完全禁用输入框,这样用户既不能编辑,也不能选中或复制文本。

3. setEchoMode()

setEchoMode() 用于设置文本框内容的显示模式,通常用于输入密码时隐藏输入字符。

用法:

lineEdit->setEchoMode(QLineEdit::Password);
  • EchoMode 常见选项:
    • QLineEdit::Normal: 默认模式,输入的字符正常显示。
    • QLineEdit::Password: 隐藏输入的字符,显示为 *
    • QLineEdit::NoEcho: 完全不显示输入内容。

扩展:

  • 此功能主要用于增强安全性,常见于登录界面的密码输入框。
  • 如果需要输入时显示密码,再次点击隐藏密码,可以结合复选框(CheckBox)切换 setEchoMode 值来实现。

4. setDisabled()

setDisabled() 方法用于禁用输入框,使其不可编辑和不可交互。

用法:

lineEdit->setDisabled(true);
  • 禁用的控件通常会灰显,表示无法使用。

扩展:

  • setReadOnly() 的区别在于,setReadOnly() 仅禁止编辑,但用户依然可以复制文本;而 setDisabled() 完全禁用控件,用户无法进行任何操作。
  • 在复杂表单或工作流程中,某些步骤可能会暂时禁用某些控件,等到特定条件满足后再启用它们,可以使用 setDisabled(false) 重新启用控件。

5. setValidator()

setValidator() 用于设置输入验证器,控制用户输入的格式。例如,限制用户只能输入整数、浮点数或特定模式的字符串。

用法:

QIntValidator *validator = new QIntValidator(0, 100, this);
lineEdit->setValidator(validator);
  • 这个例子限制用户只能输入 0 到 100 之间的整数。

扩展:

  • QIntValidator:限制整数输入。
  • QDoubleValidator:限制浮点数输入,可以设置精度和范围。
  • QRegExpValidator:使用正则表达式来限制输入。例如,限制输入邮箱地址格式:
    QRegExp regExp("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}");
    QRegExpValidator *validator = new QRegExpValidator(regExp, this);
    lineEdit->setValidator(validator);
    

6. setAlignment()

setAlignment() 用于设置文本在输入框中的对齐方式。

用法:

lineEdit->setAlignment(Qt::AlignCenter);
  • 选项包括:
    • Qt::AlignLeft: 左对齐(默认)。
    • Qt::AlignRight: 右对齐。
    • Qt::AlignCenter: 居中对齐。

扩展:

  • 在设计具有表单风格的界面时,可以通过 setAlignment() 美化界面。例如,在数据输入时,将金额类信息设置为右对齐,或者标题类信息居中对齐。
  • 也可以结合样式表(stylesheet)进一步自定义文本框外观,如更改字体颜色、背景颜色等:
    lineEdit->setStyleSheet("QLineEdit { background-color: yellow; }");
    

延伸知识点

  1. 信号和槽机制
    QLineEdit 继承自 QWidget,它的操作(如文本内容变化)可以与 Qt 的信号和槽机制结合,执行特定的操作。常用信号有:

    • textChanged(const QString&): 当文本内容发生变化时发射。
    • editingFinished(): 当用户完成编辑并按下回车键或控件失去焦点时发射。

    用法示例

    connect(lineEdit, &QLineEdit::textChanged, this, &MainWindow::onTextChanged);
    
  2. 占位符文本
    可以使用 setPlaceholderText() 为输入框设置占位符文本(当输入框为空时显示的提示内容)。

    lineEdit->setPlaceholderText("Enter your name");
    
  3. 自动补全功能
    QLineEdit 可以通过 QCompleter 提供自动补全功能,用户输入时会根据可能的选项进行补全提示。

    QStringList wordList = {"apple", "banana", "grape"};
    QCompleter *completer = new QCompleter(wordList, this);
    lineEdit->setCompleter(completer);
    

结尾

最后,感谢您阅读我的文章,希望这些内容能够对您有所启发和帮助。如果您有任何问题或想要分享您的观点,请随时在评论区留言。
同时,不要忘记订阅我的博客以获取更多有趣的内容。在未来的文章中,我将继续探讨这个话题的不同方面,为您呈现更多深度和见解。
谢谢您的支持,期待与您在下一篇文章中再次相遇!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妖精七七_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值