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中的右键菜单等.通常情况下,我们软件都不会是纯英文的,那么如何 ...
随机推荐
- vue+axios实现移动端图片上传
在利用vue做一些H5页面时,或多或少会遇到有图片上传的操作,主要是运用html5里面的input[type=file]来实现,传递到后端的数据是以二进制的格式传递,所以上传图片的请求与普通的请求稍微 ...
- 命令:hash
简介 hash命令是bash的内置命令. 我们知道在bash中执行外部命令,会根据环境变量PATH来逐一搜索命令的路径. hash就是用于记住命令的路径,并且在下次执行命令的时候直接通过hash获取而 ...
- 10,EasyNetQ-发布确认
默认的AMQP发布不是事务性的,并且不能保证您的消息实际上会到达代理. AMQP指定了一个事务性发布,但是对于RabbitMQ来说,它非常慢,我们还没有通过EasyNetQ API支持. 对于高性能保 ...
- crm——stark组件核心原理
关于stark组件的简要介绍: 启动后.路由加载前定制一段代码. a. 创建一个 stark app 组件 b. 编写ready方法 from dj ...
- C++学习笔记44:继承与派生
类的组合,类的继承 类的组合(汽车类,轮子类,此时可以把轮子类组合到汽车类:) 类的继承(交通工具类,汽车类,此时汽车类可以派生自交通工具类:) 组合:常用描述has a.. 继承:常用描述is a ...
- DB2表不活动的处理方法
DB2表不活动的处理方法(转载)首先查一下: db2 57016 SQLSTATE 57016: 因为表不活动,所以不能对其进行访问. 解决方法为:执行命令:reorg table XXX:即可. 参 ...
- 虚拟机搭建和安装Hadoop及启动
马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...
- Automatic overvoltage protection
In most cases the voltage that is induced in the coil can not exceed 6V, and it does not have risk t ...
- 第五章703N 刷openwrt 挂载u盘
感谢原文 http://blog.csdn.net/qinpeng_zbdx/article/details/8577212 http://arch.pconline.com.cn//pcjob/sy ...
- Android ViewFlipper增添ScrollView后不能滑动了
Android ViewFlipper添加ScrollView后不能滑动了在Activity中添加ScrollView实现滚动activity的效果后,activity的滑动效果却无法生效了,原因是因 ...