最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt實(shí)現(xiàn)密碼框

 更新時(shí)間:2022年06月14日 14:18:04   作者:憶秋年jd  
這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)密碼框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Qt實(shí)現(xiàn)密碼框的具體代碼,供大家參考,具體內(nèi)容如下

密碼輸入框

支持無(wú)可選擇,不可復(fù)制,粘貼,可查看密碼,全清除功能

環(huán)境

Qt5.6.2+ Vs2013

效果

代碼

QPasswdLineEdit類

PasswdLineEdit.h

#ifndef PASSWDLINEEDIT_H
#define PASSWDLINEEDIT_H

#include <QLineEdit>
#include <QPushButton>

class QPasswdLineEdit : public QLineEdit
{
?? ?Q_OBJECT

public:
?? ?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;?? ?//能否復(fù)制黏貼
?? ?bool x_bSelection; ?//能否能選中
?? ?bool x_bContenx; ?//是否存在右鍵菜單

?? ?bool x_bShow;
};

#endif // PASSWDLINEEDIT_H

PasswdLineEdit.cpp

#include "PasswdLineEdit.h"

#include <QEvent>
#include <QKeyEvent>
#include <QPainter>
#include <QHBoxLayout>
#include <QSize>

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<QPasswdLineEdit*>(watched);

?? ?if (_pObj == this)
?? ?{
?? ??? ?switch (event->type())
?? ??? ?{
?? ??? ?case QEvent::MouseMove:
?? ??? ?case QEvent::MouseButtonDblClick:
?? ??? ??? ?return !x_bSelection;
?? ??? ??? ?break;
?? ??? ?case QEvent::MouseButtonPress:
?? ??? ??? ?{
?? ??? ??? ??? ?QMouseEvent* _pMouseEvent = static_cast<QMouseEvent*>(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);

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

武城县| 东兴市| 光山县| 东海县| 若羌县| 武山县| 绍兴县| 卢湾区| 甘肃省| 浦东新区| 东丽区| 韶关市| 科技| 攀枝花市| 东至县| 札达县| 武清区| 新干县| 封开县| 贡觉县| 丰台区| 绥滨县| 确山县| 宜州市| 克什克腾旗| 孙吴县| 金寨县| 茶陵县| 甘泉县| 汝南县| 沂水县| 呼伦贝尔市| 江门市| 赤壁市| 通许县| 宁德市| 甘南县| 深州市| 邢台县| 巴塘县| 汨罗市|