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(); }
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- QT實現制作一個ListView列表的示例代碼
- Qt事件過濾實現點擊圖片的放大和縮小
- Qt界面中滑動條的實現方式
- Qt重寫QStackedWidget模擬實現home界面滑動效果
- Qt超時鎖屏的實現示例