基于QLineEdit 实现查看密码查看或清空

QLineEdit 通过addAction可以为编译框相关操作

1、QLineEdit添加密码可见和不可见操作。

        A、显示效果

         

        B、使用代码

    ui->lineEdit->SetEditType(QCustomEdit::EmEdit_Psw);
    QIcon iconVisible(":/img/image/visible.png");
    QIcon iconInvisible(":/img/image/invisible.png");
    ui->lineEdit->SetIconPsw(iconVisible, iconInvisible);

2、QLineEdit添加清空操作。文本框不为空时显示清空操作

        A、显示效果

       

        B、使用代码

    ui->lineEdit->SetEditType(QCustomEdit::EmEdit_Clear);
    QIcon iconClear(":/img/image/lineedit_clear.png");
    ui->lineEdit->SetIconClear(iconClear);

    3、重写QLineEdit

#ifndef QCUSTOMEDIT_H
#define QCUSTOMEDIT_H

#include <QLineEdit>
#include <QAction>
#include <QIcon>

class QCustomEdit : public QLineEdit
{
    Q_OBJECT
public:
    typedef enum EmEditType
    {
        EmEdit_Default = 0x00,           //默认编辑框
        EmEdit_Clear,                  //带清空按钮编辑框
        EmEdit_Psw                      //密码编辑框可查看密码
    }EmEditType;

    explicit QCustomEdit(QWidget *parent = nullptr);
    void SetEditType(QCustomEdit::EmEditType emEditType);
    void SetIconClear(const QIcon& iconClear);
    void SetIconPsw(const QIcon& iconPswVisible, const QIcon& iconPswInvisible);
private:
    void init();
private slots:
    void onActionShowPsw();
    void onActionClear();
    void onActionClearShow(const QString &text);

private:
    EmEditType m_emEditType;
    QAction* m_action;
    bool m_bShowPsw;                        //是否显示密码
    QIcon m_iconPswVisible;                 //密码可见图标
    QIcon m_iconPswInvisible;               //密码不可见图标
};

#endif // QCUSTOMEDIT_H
#include "QCustomEdit.h"

QCustomEdit::QCustomEdit(QWidget *parent) : QLineEdit(parent)
{
    m_action = new QAction(this);
    m_bShowPsw = false;
}

void QCustomEdit::SetEditType(QCustomEdit::EmEditType emEditType)
{
    m_emEditType = emEditType;
}

void QCustomEdit::SetIconClear(const QIcon& iconClear)
{
    if(m_emEditType == EmEdit_Clear)
    {
        m_action->setIcon(iconClear);
        addAction(m_action, QLineEdit::TrailingPosition);
        m_action->setVisible(false);
        connect(m_action, SIGNAL(triggered()), this, SLOT(onActionClear()));
        connect(this, SIGNAL(textChanged(const QString &)),
                this, SLOT(onActionClearShow(const QString &)));
   }
}

void QCustomEdit::SetIconPsw(const QIcon& iconPswVisible, const QIcon& iconPswInvisible)
{ 
    if(m_emEditType == EmEdit_Psw)
    {
        m_iconPswVisible = iconPswVisible;
        m_iconPswInvisible = iconPswInvisible;
        addAction(m_action, QLineEdit::TrailingPosition);
        m_action->setIcon(m_iconPswVisible);
        setEchoMode(QLineEdit::Password);
        connect(m_action, SIGNAL(triggered()), this, SLOT(onActionShowPsw()));
    }
}

void QCustomEdit::onActionShowPsw()
{
    m_bShowPsw =!m_bShowPsw;
    if(m_bShowPsw)
    {
        m_action->setIcon(m_iconPswInvisible);
        setEchoMode(QLineEdit::Normal);
    }
    else
    {
        m_action->setIcon(m_iconPswVisible);
        setEchoMode(QLineEdit::Password);
    }
}

void QCustomEdit::onActionClear()
{
    clear();
}

void QCustomEdit::onActionClearShow(const QString &text)
{
    if(text.isEmpty())
    {
        m_action->setVisible(false);
    }
    else
    {
        m_action->setVisible(true);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值