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