Qt实现密码框

本文实例为大家分享了Qt实现密码框的具体代码,供大家参考,具体内容如下
密码输入框 支持无可选择,不可复制,粘贴,可查看密码,全清除功能
环境 Qt5.6.2+ Vs2013
效果 Qt实现密码框
文章图片

代码 QPasswdLineEdit类
PasswdLineEdit.h

#ifndef PASSWDLINEEDIT_H#define PASSWDLINEEDIT_H#include #include class QPasswdLineEdit : public QLineEdit{Q_OBJECTpublic:explicit QPasswdLineEdit(QWidget *parent = nullptr); ~QPasswdLineEdit(); void setCopyAble(bool able); void setSelection(bool able); void setContextMenu(bool able); protected:bool eventFilter(QObject *watched, QEvent *event); private slots:void slot_textChanged(const QString& text); void slot_show(); void slot_hide(); void slot_clear(); private:QPushButton* x_pBtnShow; QPushButton* x_pBtnHide; QPushButton* x_pBtnClear; bool x_bCopy; //能否复制黏贴bool x_bSelection; //能否能选中bool x_bContenx; //是否存在右键菜单bool x_bShow; }; #endif // PASSWDLINEEDIT_H

PasswdLineEdit.cpp
#include "PasswdLineEdit.h"#include #include #include #include #include QPasswdLineEdit::QPasswdLineEdit(QWidget *parent): QLineEdit(parent), x_pBtnShow(nullptr), x_pBtnHide(nullptr), x_pBtnClear(nullptr), x_bCopy(false), x_bSelection(false), x_bContenx(false), x_bShow(false){x_pBtnShow = new QPushButton(this); x_pBtnHide = new QPushButton(this); x_pBtnClear = new QPushButton(this); setStyleSheet("QPushButton{border:none; }"); QPixmap _pixClear(":/image/clear"); x_pBtnClear->setIcon(_pixClear); x_pBtnClear->setIconSize(_pixClear.size()); x_pBtnClear->setCursor(Qt::PointingHandCursor); x_pBtnClear->setToolTip(QString::fromLocal8Bit("清理")); QPixmap _pixShow(":/image/show"); x_pBtnShow->setIcon(_pixShow); x_pBtnShow->setIconSize(_pixShow.size()); x_pBtnShow->setCursor(Qt::PointingHandCursor); x_pBtnShow->setToolTip(QString::fromLocal8Bit("查看密码")); QPixmap _pixHide(":/image/hide"); x_pBtnHide->setIcon(_pixHide); x_pBtnHide->setIconSize(_pixHide.size()); x_pBtnHide->setCursor(Qt::PointingHandCursor); x_pBtnHide->setToolTip(QString::fromLocal8Bit("隐藏密码")); QHBoxLayout* _pHLayout = new QHBoxLayout(); _pHLayout->addStretch(); _pHLayout->addWidget(x_pBtnShow); _pHLayout->addWidget(x_pBtnHide); _pHLayout->addWidget(x_pBtnClear); _pHLayout->setMargin(0); _pHLayout->setSpacing(0); x_pBtnShow->hide(); x_pBtnHide->hide(); x_pBtnClear->hide(); this->setLayout(_pHLayout); this->setTextMargins(1, 1, 1, 1); setFixedHeight(30); //密码显示模式setEchoMode(QLineEdit::Password); if (x_bContenx){this->setContextMenuPolicy(Qt::DefaultContextMenu); }else{this->setContextMenuPolicy(Qt::NoContextMenu); }this->installEventFilter(this); connect(this, SIGNAL(textChanged(const QString&)), this, SLOT(slot_textChanged(const QString&))); connect(x_pBtnShow, SIGNAL(clicked()), this, SLOT(slot_show())); connect(x_pBtnHide, SIGNAL(clicked()), this, SLOT(slot_hide())); connect(x_pBtnClear, SIGNAL(clicked()), this, SLOT(slot_clear())); }QPasswdLineEdit::~QPasswdLineEdit(){}void QPasswdLineEdit::setCopyAble(bool able){x_bCopy = able; }void QPasswdLineEdit::setSelection(bool able){x_bSelection = able; }void QPasswdLineEdit::setContextMenu(bool able){x_bContenx = able; if (x_bContenx){this->setContextMenuPolicy(Qt::DefaultContextMenu); }else{this->setContextMenuPolicy(Qt::NoContextMenu); }}bool QPasswdLineEdit::eventFilter(QObject *watched, QEvent *event){QPasswdLineEdit* _pObj = qobject_cast(watched); if (_pObj == this){switch (event->type()){case QEvent::MouseMove:case QEvent::MouseButtonDblClick:return !x_bSelection; break; case QEvent::MouseButtonPress:{QMouseEvent* _pMouseEvent = static_cast(event); if (_pMouseEvent->button() == Qt::RightButton){return !x_bContenx; }}break; default:break; }}return QLineEdit::eventFilter(watched, event); }void QPasswdLineEdit::slot_textChanged(const QString& text){if (!text.isEmpty()){setTextMargins(1, 1, 36, 1); if (x_bShow){x_pBtnShow->hide(); x_pBtnHide->show(); }else{x_pBtnShow->show(); x_pBtnHide->hide(); }x_pBtnClear->show(); }else{x_pBtnShow->hide(); x_pBtnHide->hide(); x_pBtnClear->hide(); x_bShow = false; setEchoMode(QLineEdit::Password); this->setTextMargins(1, 1, 1, 1); }}void QPasswdLineEdit::slot_show(){x_bShow = true; setEchoMode(QLineEdit::Normal); x_pBtnShow->hide(); x_pBtnHide->show(); }void QPasswdLineEdit::slot_hide(){setEchoMode(QLineEdit::Password); x_pBtnShow->show(); x_pBtnHide->hide(); }void QPasswdLineEdit::slot_clear(){clear(); }

使用
x_pPsdEdit = new QPasswdLineEdit(this); QGridLayout* _pGLayout = new QGridLayout(); _pGLayout->addWidget(x_pPsdEdit); setLayout(_pGLayout);

【Qt实现密码框】以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    推荐阅读