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);
}
}