C语言
主页 > 软件编程 > C语言 >

Qt实现密码显示按钮

2022-06-14 | 酷站 | 点击:

PasswordLineEdit.h

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

#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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

#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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#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();

}

原文链接:https://blog.csdn.net/TM1695648164/article/details/119686737
相关文章
最新更新