Qt 密码框不可选中、复制、粘贴、无右键菜单等
在做用户登录、修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同。
例如:不能选中、复制、粘贴、无右键菜单等功能,当然设置密码不可见是必须的!
一般的密码框:(默认 可以选中,复制,粘贴,有右键菜单)
QLineEdit *pCommonLineEdit = new QLineEdit(this);
pCommonLineEdit->setPlaceholderText(QStringLiteral("密码由字母、数字、下划线组成,长度8-16位"));
//QStringLieral是Qt5中新引入的一个用来从“字符串常量”创建QString对象的宏
pCommonLineEdit->setEchoMode(QLineEdit::Password);
下面进行一些设置:不可选择,没有右键菜单
1.可以进行事件重写去完成
class PasswordLineEdit : public QLineEdit
{
Q_OBJECT public:
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<QLineEdit *>(obj);
if (pLineEdit != NULL)
{
switch (event->type())
{
case QEvent::MouseMove:
case QEvent::MouseButtonDblClick:
return true;
case QEvent::KeyPress:
{
QKeyEvent *pKeyEvent = static_cast<QKeyEvent*>(event);
if(pKeyEvent->matches(QKeySequence::SelectAll)
|| pKeyEvent->matches(QKeySequence::Copy)
|| pKeyEvent->matches(QKeySequence::Paste))
{
return true;
}
}
}
}
return QObject::eventFilter(obj, event);
}
Qt 密码框不可选中、复制、粘贴、无右键菜单等的更多相关文章
- Qt之密码框不可全选、复制、粘贴无右键菜单等
转载---> http://blog.sina.com.cn/s/blog_a6fb6cc90101artk.html 在做用户登录界面的时候,往往会用到密码框,则其中的一些功能也要求与普通的输 ...
- Qt之密码框不可选中、复制、粘贴、无右键菜单等
简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ...
- 【Qt】Qt之密码框不可选中、复制、粘贴、无右键菜单等【转】
简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ...
- PyQt:自定义QLineEdit禁止选中复制粘贴
说明 自定义的QLineEdit,当输入文本之后,禁止选中复制粘贴等操作 实现方法 MyQLineEdit类继承了QLineEdit类,并重写QLineEdit类中的mouseMoveEvent方法和 ...
- Xshell 远程使用vim打开文件不能使用右键复制粘贴(右键显示可视)的问题
Xshell 远程使用vim打开文件不能使用右键复制粘贴(右键显示可视)的问题 Debian9.4系统不能再VIM打开文件界面不能使用右键复制粘贴 root@debian:~# vim /usr/sh ...
- Qt之中文显示(QMessageBox、QLineEdit右键菜单等)
来源:http://blog.sina.com.cn/s/blog_a6fb6cc90101art3.html 在编写Qt程序的时候,总会碰到中文问题,一直都很困惑,原本在使用QLineEdit的时候 ...
- js禁止页面复制 禁用页面右键菜单的代码
js实现禁止页面复制功能.禁用页面右键菜单等功能. <body oncontextmenu="return false">禁用网页右键菜单,但是仍然可以使用快捷键复制 ...
- 禁止页面复制功能 js禁止复制 禁用页面右键菜单
<body oncontextmenu="return false">禁用网页右键菜单,但是仍然可以使用快捷键复制. js代码禁用复制功能: <script t ...
- 【Qt】Qt国际化(系统文本-QMessageBox按钮、QLineEdit右键菜单等)【转】
简介 使用Qt的时候,经常会遇到英文问题,例如:QMessageBox中的按钮.QLineEdit.QSpinBox.QScrollBar中的右键菜单等.通常情况下,我们软件都不会是纯英文的,那么如何 ...
随机推荐
- java 同步 synchronized
http://www.cnblogs.com/Qian123/p/5691705.html http://www.cnblogs.com/GnagWang/archive/2011/02/27/196 ...
- (转)【Java线程】Java内存模型总结
Java的并发采用的是共享内存模型(而非消息传递模型),线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信.多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变 ...
- 【洛谷】3960:列队【Splay】
P3960 列队 题目描述 Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有n×m名学生,方阵的行数为 ...
- c# sqlite 数据库加密
c# sqlite 数据库加密 2010-05-29 10:55 用了ADO.NET 2.0 SQLite Data Provider这样可以直接利用它来创建一个加密的sqlite数据库.有关c#代码 ...
- SVN clean失败解决方法【转】
原文地址:http://blog.csdn.net/victory08/article/details/42100325/ svn执行clean up后出现提示:svn cleanup failed– ...
- Js 判断浏览器类型整理
判断原理 JavaScript是前端开发的主要语言,我们可以通过 编写JavaScript程序来判断浏览器的类型及版本.JavaScript判断浏览器类型一般有两种办法,一种是根据各种浏览器独有的属性 ...
- PowerShell使用ServicePrincipal登陆Azure
一.打开PowerShell 二.输入下列命令 $pass = ConvertTo-SecureString "<这里换成您的AAD应用密钥>" -AsPlainTex ...
- 关于unity3dGUI(uGUI)的一些自适应的收获,在这里跟大家分享一下
假设大家要转载这篇文章,请注明出处.本人名字叫赖张殷,博客地址为http://my.csdn.net/?c=674f97f953e5dbfdba9fefaa3d1fcbe1 //2017年5月12日改 ...
- 解决nginx access日志中400 bad request 错误(转)
在access.log中有大量400错误,并以每天几百M的速度增加,占用大量空间.tail -f /opt/nginx/logs/access.log 116.236.228.180 - - [15/ ...
- window7开启Administrator账户
需求描述: 在工作遇见,安装部分软件,对目录不具有写权限.为了彻底解决问题.启用Administrator账户! 问题解决: 激活Administrator账户,并设置密码 重启系统,用Adminis ...