Qt输入框设置图标【隐藏/显示内容】

本文章讲怎么在输入框中添加图标,并增加显示 / 隐藏输入框文本内容。这里使用的Qt版本6.6.3,其他版本应该也可以用,不行的话需要自己调整一下

一般情况会使用QToolButton(或者QPushButton) + QLineEdit然后使用布局管理器(QHBoxLayout)来实现,这种方式也可以实现在输入框加入图标。如下
这里借用其他博主的文章:http://t.csdnimg.cn/qHs83,效果如图

如果觉得这种以上方式符合自己需求也可以使用这个方式,下边我讲介绍一种比较实现比较简单的方式

采用:QLineEdit + QAction的方式

首先,准备两个图片,作为图标

QIcon eyeIcon, eyeOffIcon;
FileReadWrite::loadSvgToIcon(":/eye-off-outline.svg", eyeOffIcon);
FileReadWrite::loadSvgToIcon(":/eye-outline.svg", eyeIcon);

创建一个action动作,并与输入框绑定,其中QLineEdit::TrailingPosition是显示在右边,其他方向的自己百度

passwordLineEdit->setEchoMode(QLineEdit::Password);
QAction* passwordAction = new QAction(passwordLineEdit);
passwordAction->setIcon(eyeIcon);
passwordLineEdit->addAction(passwordAction,QLineEdit::TrailingPosition);

 这个时候图标就绑定到输入框上了,如图

然后就可以设置一个bool值用来判断输入框内容是否可见,初始为false不可见

在通过 connect 函数来实现切换图标和隐藏显示输入框内容操作

bool isPasswordVisible = false;
connect(passwordAction, &QAction::triggered, [this, passwordAction, &isPasswordVisible]() {
    if (isPasswordVisible) {
        passwordLineEdit->setEchoMode(QLineEdit::Password);
        passwordAction->setIcon(eyeIcon);
    } else {
        passwordLineEdit->setEchoMode(QLineEdit::Normal);
        passwordAction->setIcon(eyeOffIcon);
    }
    isPasswordVisible = !isPasswordVisible;
});

ok,这样就可以显示隐藏文本框内容了

完整代码

void Test::togglePasswordVisibility() { 
    FileReadWrite::loadSvgToIcon(":/eye-off-outline.svg", eyeOffIcon);
    FileReadWrite::loadSvgToIcon(":/eye-outline.svg", eyeIcon);
    passwordLineEdit->setEchoMode(QLineEdit::Password);
    QAction* passwordAction = new QAction(passwordLineEdit);
    passwordAction->setIcon(eyeIcon);
    passwordLineEdit->addAction(passwordAction,QLineEdit::TrailingPosition);

    bool isPasswordVisible = false;
    connect(passwordAction, &QAction::triggered, [this, passwordAction, &isPasswordVisible]() {
        if (isPasswordVisible) {
            passwordLineEdit->setEchoMode(QLineEdit::Password);
            passwordAction->setIcon(eyeIcon);
        } else {
            passwordLineEdit->setEchoMode(QLineEdit::Normal);
            passwordAction->setIcon(eyeOffIcon);
        }
        isPasswordVisible = !isPasswordVisible;
    });
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值