Qt keyPressEvent keyReleaseEvent 分析
最近使用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 分析的更多相关文章
- Qt源码分析之QObject
原文:http://blog.csdn.net/oowgsoo/article/details/1529284 我感觉oowgsoo兄弟写的分析相当透彻,赞! 1.试验代码: #include < ...
- QT源码分析(从QApplication开始)
QT源码分析 转载自:http://no001.blog.51cto.com/1142339/282130 今天,在给同学讲东西的时候,谈到了Qt源代码的问题,才发现自己对Qt机制的了解是在太少了,而 ...
- 基于Qt的信号分析简单应用软件的设计
一.需求描述: 1.读取data.asc文件,分析其连续性: 2.绘制信号图像,并保存. 二.UI界面组成: 该应用的UI由以下几个控件组成: 3个PushButton:打开文件.图像保存.退出: 1 ...
- Qt序列化格式分析(qint,QString)(非常简单好用)
最近项目需要进行QT开发环境下对传输对象进行序列化与反序列化处理,对基本类型的处理在使用QT默认的序列化方式还是完全手工序列化这两种方式之间有些犹疑不定,边想了解下QT默认序列化基本类型的格式,项目中 ...
- Qt keyPressEvent
keyPressEvent是QWidget里面的函数,所以凡是继承自QWidget的类都可以通过实现这个函数来完成对按键事件的响应. 要让当前的widget能够响应按键事件,最先需要做的事情是,调用: ...
- Qt线程实现分析-moveToThread vs 继承
最近抽空研究了下QThread,使用起来方式多种多样,但是在使用的同时,我们也应该去了解Qt的线程它到底是怎么玩儿的. Qt的帮助文档里讲述了2种QThread的使用方式,一种是moveToThrea ...
- QT源码分析:QObject
QT框架里面最大的特色就是在C++的基础上增加了元对象系统(Meta-Object System),而元对象系统里面最重要的内容就是信号与槽机制,这个机制是在C++语法的基础上实现的,使用了函数.函数 ...
- QT源码分析:QTcpServer
最近在看有关IO复用方面的内容,自己也用标准c++库实现了select模型.iocp模型.poll模型.回过头来很想了解QT的socket是基于什么模型来实现的,所以看了QT关于TcpServer实现 ...
- Qt deletelater函数分析(1)
生活的全部意义在于无穷地探索尚未知道的东西,在于不断地增加更多的知识.--左拉 该函数是QObject类的函数: ---- ...
随机推荐
- **不使用tuple函数,将列表转为元组
使用动态参数: l = [1, 1, 3, 4, 5] def f(*args): return args x = f(*l) print(x)
- Unknown picture file extension
Image1.Picture.LoadFromFile('aaa.jpg'); Project Project1.exe raised exception class EInvalidGraphic ...
- Java多线程-线程的生命周期
线程可以分为4个状态:New(新生),Runnable(可运行):为了方便分析,还可将其分为:Runnable与Running.blocked(被阻塞),Dead(死亡). 与人有生老病死一样,线程也 ...
- iOS 布局之 Springs and Struts
“springs and struts” 模式,就是代码中的autosizing masks布局控制. autosizing mask决定了一个view会发生什么当它的superview 改变大小的时 ...
- 关于 jdbc 的错误
- 150. Evaluate Reverse Polish Notation (Stack)
Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...
- Unity3D中暂停时的动画及粒子效果实现
暂停是游戏中经常出现的功能,而Unity3D中对于暂停的处理并不是很理想.一般的做法是将Time.timeScale设置为0.Unity的文档中对于这种情况有以下描述: The scale at wh ...
- HTML5框架、背景和实体
-----------------siwuxie095 HTML5 框架 1.框架标签 <frame> ...
- vagrant 安装与配置
1.下载vagrant的安装包 http://downloads.vagrantup.com/ 2.解压安装 3.安装box环境 4.安装成功显示 5.提示要安装virbox
- C#中接口声明属性,但是提示“接口”中不能有属性。
C#中接口定义属性如下所示: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...