本文共 2763 字,大约阅读时间需要 9 分钟。
在做用户登录、修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同。
例如:不能选中、复制、粘贴、无右键菜单等功能,当然设置密码不可见是必须的!
一般的密码框:(默认 可以选中,复制,粘贴,有右键菜单)
QLineEdit *pCommonLineEdit = new QLineEdit(this);pCommonLineEdit->setPlaceholderText(QStringLiteral("密码由字母、数字、下划线组成,长度8-16位"));pCommonLineEdit->setEchoMode(QLineEdit::Password);下面进行一些设置:不可选择,没有右键菜单
1.可以进行事件重写去完成
class PasswordLineEdit : public QLineEdit{ Q_OBJECTpublic: explicit PasswordLineEdit(QWidget *parent = 0); ~PasswordLineEdit();protected: virtual void keyPressEvent(QKeyEvent *event); virtual void mouseMoveEvent(QMouseEvent *event); virtual void mouseDoubleClickEvent(QMouseEvent *event);};
PasswordLineEdit::PasswordLineEdit(QWidget *parent) : QLineEdit(parent){ //设置无右键菜单 setContextMenuPolicy(Qt::NoContextMenu); //设置无输入时密码提示 setPlaceholderText(QStringLiteral("请输入密码")); //设置密码隐藏 setEchoMode(QLineEdit::Password); //设置最大长度16位 setMaxLength(16);}PasswordLineEdit::~PasswordLineEdit(){}//屏蔽输入框全选、复制、粘贴功能void PasswordLineEdit::keyPressEvent(QKeyEvent *event){ if(event->matches(QKeySequence::SelectAll) || event->matches(QKeySequence::Copy) || event->matches(QKeySequence::Paste)) { return; } QLineEdit::keyPressEvent(event);}//鼠标位于密码框中时不可移动void PasswordLineEdit::mouseMoveEvent(QMouseEvent *event){ Q_UNUSED(event);}//鼠标位于密码框中时不可移动void PasswordLineEdit::mouseDoubleClickEvent(QMouseEvent *event){ Q_UNUSED(event);}
2.通过事件过滤器去实现上述的功能
QLineEdit *pFilterLineEdit = new QLineEdit(this);pFilterLineEdit->installEventFilter(new EventFilter(this));pFilterLineEdit->setEchoMode(QLineEdit::Password);pFilterLineEdit->setPlaceholderText(QStringLiteral("密码由字母、数字、下划线组成,长度8-16位"));pFilterLineEdit->setContextMenuPolicy(Qt::NoContextMenu);pFilterLineEdit->setMaxLength(16);
class EventFilter : public QObject{public: explicit EventFilter(QObject *parent = 0); ~EventFilter();protected: virtual bool eventFilter(QObject *obj, QEvent *event);};
EventFilter::EventFilter(QObject *parent) : QObject(parent){}EventFilter::~EventFilter(){}bool EventFilter::eventFilter(QObject *obj, QEvent *event){ QLineEdit *pLineEdit = qobject_cast上面就是三种关于密码框的一些操作,基本也够用了!(obj); if (pLineEdit != NULL) { switch (event->type()) { case QEvent::MouseMove: case QEvent::MouseButtonDblClick: return true; case QEvent::KeyPress: { QKeyEvent *pKeyEvent = static_cast (event); if(pKeyEvent->matches(QKeySequence::SelectAll) || pKeyEvent->matches(QKeySequence::Copy) || pKeyEvent->matches(QKeySequence::Paste)) { return true; } } } } return QObject::eventFilter(obj, event);}
转载地址:http://yvqxi.baihongyu.com/