Qt實(shí)現(xiàn)密碼顯示按鈕
本文實(shí)例為大家分享了Qt實(shí)現(xiàn)密碼顯示按鈕的具體代碼,供大家參考,具體內(nèi)容如下
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(); }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++實(shí)現(xiàn)LeetCode(134.加油站問(wèn)題)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(134.加油站問(wèn)題),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07判斷指定的進(jìn)程或程序是否存在方法小結(jié)(vc等)
VC判斷進(jìn)程是否存在?比如我想知道記事本是否運(yùn)行,要用到哪些函數(shù)等實(shí)例,需要的朋友可以參考下2013-01-01c++中string類(lèi)成員函數(shù)c_str()的用法
c_str()函數(shù)返回一個(gè)指向正規(guī)c字符串的指針,內(nèi)容和string類(lèi)的本身對(duì)象是一樣的,通過(guò)string類(lèi)的c_str()函數(shù)能夠把string對(duì)象轉(zhuǎn)換成c中的字符串的樣式2013-09-09C/C++實(shí)現(xiàn)遍歷文件夾最全方法總結(jié)
這篇文章主要為大家介紹了C/C++實(shí)現(xiàn)遍歷文件夾功能的最全方法總結(jié),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-09-09c語(yǔ)言根據(jù)用戶(hù)輸入的出生年份并計(jì)算出當(dāng)前年齡
這篇文章主要介紹了c語(yǔ)言根據(jù)用戶(hù)輸入的出生年份并計(jì)算出當(dāng)前年齡,需要的朋友可以參考下2023-03-03C++?反匯編之關(guān)于Switch語(yǔ)句的優(yōu)化措施
這篇文章主要介紹了C++?反匯編之關(guān)于Switch語(yǔ)句的優(yōu)化措施,利用三種優(yōu)化來(lái)降低樹(shù)高度,誰(shuí)的效率高就優(yōu)先使用誰(shuí),三種優(yōu)化都無(wú)法匹配才會(huì)使用判定樹(shù),具體內(nèi)容詳情跟隨小編一起看看吧2022-01-01用C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的三子棋
這篇文章主要為大家詳細(xì)介紹了用C語(yǔ)言實(shí)現(xiàn)三子棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06