博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Qt 密码框不可选中、复制、粘贴、无右键菜单等
阅读量:4166 次
发布时间:2019-05-26

本文共 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/

你可能感兴趣的文章
hbase shell出现ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException
查看>>
让代码变得更优雅-Lombok
查看>>
解决Rhythmbox乱码
查看>>
豆瓣爱问共享资料插件发布啦
查看>>
Ubuntu10.10 CAJView安装 读取nh\kdh\caj文件 成功
查看>>
kermit的安装和配置
查看>>
vim 配置
查看>>
openocd zylin
查看>>
进程创建时文件系统处理
查看>>
内核线程创建
查看>>
linux中cat命令使用详解
查看>>
java中的异常机制
查看>>
java SE面向对象思维导图
查看>>
三维分析之视频投放
查看>>
SuperMap iDesktop之栅格值怎么查
查看>>
SuperMap iClient3D for WebGL教程-orientation
查看>>
SuperMap iClient3D for WebGL教程-description描述属性
查看>>
SuperMap iClient3D for WebGL教程-CallbackProperty
查看>>
如何修改leaflet聚合图的层级和样式
查看>>
三维分析之开敞度分析
查看>>