Qt实现密码显示按钮
本文实例为大家分享了Qt实现密码显示按钮的具体代码,供大家参考,具体内容如下
PassWordLineEdit.h
#ifndef PASSWORDLINEEDIT_H
#define PASSWORDLINEEDIT_H
#include <QAction>
#include <QLineEdit>
#include <QToolButton>
class PasswordLineEdit : public QLineEdit {
public:
PasswordLineEdit(QWidget *parent = nullptr);
private slots:
void onPressed();
void onReleased();
protected:
void enterEvent(QEvent *event);
void leaveEvent(QEvent *event);
void focusInEvent(QFocusEvent *event);
void focusOutEvent(QFocusEvent *event);
private:
QToolButton *button;
};
#endif // PASSWORDLINEEDIT_H
PasswordLineEdit.cpp
#include "passwordlineedit.h"
PasswordLineEdit::PasswordLineEdit(QWidget *parent) : QLineEdit(parent)
{
setEchoMode(QLineEdit::Password);
QAction *action = addAction(QIcon(":/eyeOff"), QLineEdit::TrailingPosition);
button = qobject_cast<QToolButton *>(action->associatedWidgets().last());
button->hide();
button->setCursor(QCursor(Qt::PointingHandCursor));
connect(button, &QToolButton::pressed, this, &PasswordLineEdit::onPressed);
connect(button, &QToolButton::released, this, &PasswordLineEdit::onReleased);
}
void PasswordLineEdit::onPressed()
{
QToolButton *button = qobject_cast<QToolButton *>(sender());
button->setIcon(QIcon(":/eyeOn"));
setEchoMode(QLineEdit::NORMal);
}
void PasswordLineEdit::onReleased()
{
QToolButton *button = qobject_cast<QToolButton *>(sender());
button->setIcon(QIcon(":/eyeOff"));
setEchoMode(QLineEdit::Password);
}
void PasswordLineEdit::enterEvent(QEvent *event)
{
button->show();
QLineEdit::enterEvent(event);
}
void PasswordLineEdit::leaveEvent(QEvent *event)
{
button->hide();
QLineEdit::leaveEvent(event);
}
void PasswordLineEdit::focusInEvent(QFocusEvent *event)
{
button->show();
QLineEdit::focusInEvent(event);
}
void PasswordLineEdit::focusOutEvent(QFocusEvent *event)
{
button->hide();
QLineEdit::focusOutEvent(event);
}
main.cpp
#include "passwordlineedit.h"
#include <QApplication>
#include <QFormLayout>
int main(int arGC, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
PasswordLineEdit *w1 = new PasswordLineEdit;
QLineEdit *w2 = new QLineEdit;
QFormLayout *lay = new QFormLayout(&w);
lay->addRow("PasswordLineEdit: ", w1);
lay->addRow("QLineEdit: ", w2);
w.show();
return a.exec();
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关文章