密码输入框通常被用于登录界面、注册界面或需要进行身份验证的应用程序中。密码输入框的设计目的是保护用户的密码安全,防止密码被他人偷窥或盗取。
Qt的QLineEdit有隐藏密码的功能,所以只需继承 QLineEdit 添加一个QAction,用于实现显示或隐藏密码,即可实现相关功能。比较简单,欢迎参考。
一、简述
Qt实现密码输入框-隐藏或显示密码功能。在Qt中实现密码输入框的隐藏或显示密码功能可以通过使用QLineEdit和QAction来实现。
二、效果
三、核心代码
主要思路继承 QLineEdit 。添加一个QAction用于实现显示或隐藏密码, 同时为QAction显示或隐藏密码点击事件添加不同的图标。
首先,创建一个QLineEdit作为密码输入框,然后创建一个QAction作为切换按钮,用于切换密码的显示和隐藏。然后,使用setEchoMode方法来设置QLineEdit的输入模式,将其设置为QLineEdit::Password模式,这样输入的字符将被隐藏。在切换按钮的槽函数中,通过判断QLineEdit的当前输入模式,来切换到相应的模式。如果当前模式为QLineEdit::Password,则将其切换为QLineEdit::Normal模式,这样密码将被显示;如果当前模式为QLineEdit::Normal,则将其切换为QLineEdit::Password模式,密码将被隐藏。
头文件passwordedit.h
#ifndef PASSWORDEDIT_H
#define PASSWORDEDIT_H
#include <QLineEdit>
#include <QAction>
class PasswordEdit : public QLineEdit
{
Q_OBJECT
public:
explicit PasswordEdit(QWidget *parent = nullptr);
private:
void init();
void onInputVisible();
private:
QAction *m_pAction;
bool m_bVisible;
};
#endif // PASSWORDEDIT_H
实现代码passwordedit.cpp
#include "passwordedit.h"
PasswordEdit::PasswordEdit(QWidget *parent):QLineEdit(parent)
{
init();
}
void PasswordEdit::init()
{
setStyleSheet("QLineEdit {font-family: Microsoft YaHei;font-size: 12px;border: 1px solid #e5e5e5;"
"border-radius: 4px;padding: 2px 2px;min-height: 24px;max-height: 24px;}");
m_bVisible = false;
setEchoMode(QLineEdit::Password);
m_pAction = new QAction(this);
m_pAction->setIcon(QIcon(":/res/invisible.svg"));
addAction(m_pAction,QLineEdit::TrailingPosition);//右侧显示
connect(m_pAction,&QAction::triggered,this,&PasswordEdit::onInputVisible);
}
void PasswordEdit::onInputVisible()
{
m_bVisible = !m_bVisible;
if(m_bVisible)
{
m_pAction->setIcon(QIcon(":/res/visible.svg"));
setEchoMode(QLineEdit::Normal);
}
else
{
m_pAction->setIcon(QIcon(":/res/invisible.svg"));
setEchoMode(QLineEdit::Password);
}
}
如果需要限制输入,需再为此控件添加一个QValidator (验证器),构造一个验证器,该父对象接受与正则表达式匹配的所有字符串。这里的父对象就是QLineEdit对象了。匹配是针对整个字符串; 例如:如果正则表达式是[A-Fa-f0-9]+将被视为^[A-Fa-f0-9]+$。
将密码输入框设置为仅接受符合验证器条件的输入。 这允许您对可能输入的文本设置任何约束条件。因此我们这里设置的就是符合上面描述的三种约束条件。
示例如下:
QRegExp regx("^[a-zA-Z][0-9A-Za-z]{14}$");
QValidator *validator = new QRegExpValidator(regx, lineEdit);
lineEdit->setValidator( validator );
lineEdit->setMaxLength(6); // 限制只能输入6位
谢谢您的阅读和耐心,希望本文对您有所帮助。如果您有任何问题或意见,请随时与我联系。祝您一切顺利!