最近使用Qt时,在增加一个按下某键(M),临时显示图层,键(M)弹起时隐藏图层的功能时,碰到了一些问题: keyPressEvent 事件不响应

这个问题,网上搜到的结果是可能是控件没获取焦点,比如QPushButton一直占着焦点,可是界面上并没有焦点,而且,在keyPressEvent 和keyReleaseEvent 中同时打出日志,keyReleaseEvent 里面是可以响应的

最后找出来结果是因为在其余地方使用了快捷键,代码如下:

test::test()
{
QShortcut* shortcut = new QShortcut(QString("M"),this);
QObject::connect( shortcut ,&QShortcut::activated,[=]{
qDebug()<<"shortcut";
});
} void test::keyPressEvent (QKeyEvent* event)
{
qDebug()<<"keyPressEvent ";
}
void test::keyReleaseEvent (QKeyEvent* event)
{
qDebug()<<"keyReleaseEvent ";
}

按M的时候输出:

shortcut--------------->按下
keyReleaseEvent
shortcut
keyReleaseEvent
shortcut
keyReleaseEvent
...
shortcut
keyReleaseEvent ----->弹起

也就是说设置快捷键之后,是无法触发keyPressEvent 事件的

如果想去掉中间重复的这部分,可以这样(网上搜索说是要自己设置flag,额,我没设置flag,好像也没什么问题)

test::test()
{
QShortcut* shortcut = new QShortcut(QString("M"),this);
shortcut ->setAutoRepeat(false);
QObject::connect( shortcut ,&QShortcut::activated,[=]{
qDebug()<<"shortcut";
});
} void test::keyReleaseEvent (QKeyEvent* event)
{
if(event->isAutoRepeat())
event->ignore();
else
qDebug()<<"keyReleaseEvent ";
}

这样输出变为

shortcut --------------->按下
keyReleaseEvent ------->弹起

Qt keyPressEvent keyReleaseEvent 分析的更多相关文章

  1. Qt源码分析之QObject

    原文:http://blog.csdn.net/oowgsoo/article/details/1529284 我感觉oowgsoo兄弟写的分析相当透彻,赞! 1.试验代码: #include < ...

  2. QT源码分析(从QApplication开始)

    QT源码分析 转载自:http://no001.blog.51cto.com/1142339/282130 今天,在给同学讲东西的时候,谈到了Qt源代码的问题,才发现自己对Qt机制的了解是在太少了,而 ...

  3. 基于Qt的信号分析简单应用软件的设计

    一.需求描述: 1.读取data.asc文件,分析其连续性: 2.绘制信号图像,并保存. 二.UI界面组成: 该应用的UI由以下几个控件组成: 3个PushButton:打开文件.图像保存.退出: 1 ...

  4. Qt序列化格式分析(qint,QString)(非常简单好用)

    最近项目需要进行QT开发环境下对传输对象进行序列化与反序列化处理,对基本类型的处理在使用QT默认的序列化方式还是完全手工序列化这两种方式之间有些犹疑不定,边想了解下QT默认序列化基本类型的格式,项目中 ...

  5. Qt keyPressEvent

    keyPressEvent是QWidget里面的函数,所以凡是继承自QWidget的类都可以通过实现这个函数来完成对按键事件的响应. 要让当前的widget能够响应按键事件,最先需要做的事情是,调用: ...

  6. Qt线程实现分析-moveToThread vs 继承

    最近抽空研究了下QThread,使用起来方式多种多样,但是在使用的同时,我们也应该去了解Qt的线程它到底是怎么玩儿的. Qt的帮助文档里讲述了2种QThread的使用方式,一种是moveToThrea ...

  7. QT源码分析:QObject

    QT框架里面最大的特色就是在C++的基础上增加了元对象系统(Meta-Object System),而元对象系统里面最重要的内容就是信号与槽机制,这个机制是在C++语法的基础上实现的,使用了函数.函数 ...

  8. QT源码分析:QTcpServer

    最近在看有关IO复用方面的内容,自己也用标准c++库实现了select模型.iocp模型.poll模型.回过头来很想了解QT的socket是基于什么模型来实现的,所以看了QT关于TcpServer实现 ...

  9. Qt deletelater函数分析(1)

               生活的全部意义在于无穷地探索尚未知道的东西,在于不断地增加更多的知识.--左拉 该函数是QObject类的函数:                             ---- ...

随机推荐

  1. RHCE7 学习里程-4用户权限,简单进程管理

    #创建用户 useradd abc 使用 vipw 命令查看 /etc/passwd 文件下 是否存在新用户 #G却换到最后一行 #创建账号的时候,默认也新建了一个组,组名跟用户名一样 groupad ...

  2. python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib subprocess logging re正则

    python 常用模块 time random os模块 sys模块 json & pickle shelve模块 xml模块 configparser hashlib  subprocess ...

  3. Django restframework Token拥有不过期的认证

    REST框架中的Token认证不像Session认证一样,它是没有办法设置过期时间的,但是有时我们需要对Token做过期验证,比如说用户在A设备登陆之后获取一个Token,如果用户在没有清空浏览器缓存 ...

  4. AttributeUsage

    [AttributeUsage] System.AttributeUsage声明一个Attribute的使用范围与使用原则. AllowMultiple 和 Inherited 参数是可选的,所以此代 ...

  5. 4600007972内销新单未取进FP

    1.首先检查 in_sales_order表: select * from in_sales_order where so_id='04600007972'发现没有数据 2.接着检查从SAP导数的步骤 ...

  6. Apache Hive (五)DbVisualizer配置连接hive

    转自:https://www.cnblogs.com/qingyunzong/p/8715250.html 一.安装DbVisualizer 下载地址http://www.dbvis.com/ 也可以 ...

  7. Thrift辅助类,用于简化Thrift编程

    CThriftServerHelper用于服务端,CThriftClientHelper用于客户端. IDL定义: service PackageManagerService { } 服务端使用示例: ...

  8. HALCON机器视觉软件

    HALCON是德国MVtec公司开发的一套完善的标准的机器视觉算法包,拥有应用广泛的机器视觉集成开发环境.它节约了产品成本,缩短了软件开发周期——HALCON灵活的架构便于机器视觉,医学图像和图像分析 ...

  9. 编写高质量代码改善C#程序的157个建议——建议70:避免在调用栈较低的位置记录异常

    建议70:避免在调用栈较低的位置记录异常 并不是所有的异常都要被记录到日志,一类情况是异常发生的场景需要被记录,还有一类就是未被捕获的异常.未被捕获的异常通常被视为一个Bug,所以,对于它的记录,应该 ...

  10. 20169205实验一 Java开发环境的熟悉(Linux+IDEA)

    20169205实验一 Java开发环境的熟悉(Linux+IDEA) 实验内容及步骤 使用JDK编译.运行简单的Java程序 打开windows下的cmd → 输入cd Code命令进入Code目录 ...