在做用户登录、修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同。

例如:不能选中、复制、粘贴、无右键菜单等功能,当然设置密码不可见是必须的!

一般的密码框:(默认 可以选中,复制,粘贴,有右键菜单)

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 密码框不可选中、复制、粘贴、无右键菜单等的更多相关文章

  1. Qt之密码框不可全选、复制、粘贴无右键菜单等

    转载---> http://blog.sina.com.cn/s/blog_a6fb6cc90101artk.html 在做用户登录界面的时候,往往会用到密码框,则其中的一些功能也要求与普通的输 ...

  2. Qt之密码框不可选中、复制、粘贴、无右键菜单等

    简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ...

  3. 【Qt】Qt之密码框不可选中、复制、粘贴、无右键菜单等【转】

    简述 在做用户登录.修改密码的时候,往往会用到密码框,其中一些功能要求与普通的输入框不同,例如:不能选中.复制.粘贴.无右键菜单等功能,当然设置密码不可见是必须的! 下面介绍两种方式来实现相同的效果. ...

  4. PyQt:自定义QLineEdit禁止选中复制粘贴

    说明 自定义的QLineEdit,当输入文本之后,禁止选中复制粘贴等操作 实现方法 MyQLineEdit类继承了QLineEdit类,并重写QLineEdit类中的mouseMoveEvent方法和 ...

  5. Xshell 远程使用vim打开文件不能使用右键复制粘贴(右键显示可视)的问题

    Xshell 远程使用vim打开文件不能使用右键复制粘贴(右键显示可视)的问题 Debian9.4系统不能再VIM打开文件界面不能使用右键复制粘贴 root@debian:~# vim /usr/sh ...

  6. Qt之中文显示(QMessageBox、QLineEdit右键菜单等)

    来源:http://blog.sina.com.cn/s/blog_a6fb6cc90101art3.html 在编写Qt程序的时候,总会碰到中文问题,一直都很困惑,原本在使用QLineEdit的时候 ...

  7. js禁止页面复制 禁用页面右键菜单的代码

    js实现禁止页面复制功能.禁用页面右键菜单等功能.  <body oncontextmenu="return false">禁用网页右键菜单,但是仍然可以使用快捷键复制 ...

  8. 禁止页面复制功能 js禁止复制 禁用页面右键菜单

    <body oncontextmenu="return false">禁用网页右键菜单,但是仍然可以使用快捷键复制. js代码禁用复制功能: <script  t ...

  9. 【Qt】Qt国际化(系统文本-QMessageBox按钮、QLineEdit右键菜单等)【转】

    简介 使用Qt的时候,经常会遇到英文问题,例如:QMessageBox中的按钮.QLineEdit.QSpinBox.QScrollBar中的右键菜单等.通常情况下,我们软件都不会是纯英文的,那么如何 ...

随机推荐

  1. 在Spring中配置SQL server 2000

    前言 Lz主要目的是在Spring中配置SQL server 2000数据库,但实现目的的过程中参差着许多SQL server 2000的知识,也包罗在本文记载下来!(Lz为什么要去搞sql serv ...

  2. 洛谷.4115.Qtree4/BZOJ.1095.[ZJOI2007]Hide捉迷藏(动态点分治 Heap)

    题目链接 洛谷 SPOJ BZOJ1095(简化版) 将每次Solve的重心root连起来,会形成一个深度为logn的树,就叫它点分树吧.. 我们对每个root维护两个东西: 它管辖的子树中所有白点到 ...

  3. android TextView如何换行?

    具体代码是: rb_zuotian.setText("第一行"+"\n"+"第二行"); rb_jintian.setText(DateUt ...

  4. Android MediaCodec的数据处理方式分析

    *由于工作需要,需要利用MediaCodec实现Playback及Transcode等功能,故在学习过程中翻译了Google官方的MediaCodec API文档,由于作者水平限制,文中难免有错误和不 ...

  5. 继承之super关键字的使用

    一.super关键字: 在对象的内部使用,可代表父类对象. 1. 访问父类的属性:super.age 2. 访问父类的方法:super.eat() 例: package 关键字extends; pub ...

  6. [原创]Java性能优化权威指南读书思维导图4

    [原创]Java性能优化权威指南读书思维导图4

  7. winform 中 给DataGridView的表头添加CheckBox

    在C/S架构中,给DataGridView的表头添加CheckBox控件: 添加类:   /// <summary>       /// 给DataGridView添加全选       / ...

  8. 在 Python 中使用 in_memory 工作空间

    在 Python 中使用 in_memory 工作空间 在 Python 脚本中,in_memory 工作空间仅对地理处理工具有效:它不是可以写入任何数据的通用虚拟目录. 您可以按以下代码示例所示使用 ...

  9. ARouter原理剖析及手动实现

    ARouter原理剖析及手动实现 前言 路由跳转在项目中用了一段时间了,最近对Android中的ARouter路由原理也是研究了一番,于是就给大家分享一下自己的心得体会,并教大家如何实现一款简易的路由 ...

  10. ds18b20采集温度并上报服务器

    交叉编译器:arm-linux-gcc-4.5.4 Linux内核版本:Linux-3.0 主机操作系统:Centos 6.5 开发板:FL2440 温度传感器:ds18b20 注:此程序的客户端是在 ...