【2017-06-06】Qt中的键盘事件:QKeyEvent及相关处理函数
QKeyEvent及其相关的处理函数,比如QKeyPressEvent、QKeyReleaseEvent()等在QtGui编程中非常常用,尤其是需要借助标准键盘的编码来实现一些自定义功能的时候。
这算是QtGui编程中非常基础的东西,但如果事先没仔细了解手册中关于这一部分的介绍的话,还是有不少坑的。
为什么想起来写这个呢?之前的一个项目用了使用标准键盘芯片做的面板,但有一部分按键的key()是重复的,以前在Linux-Arm中底层编码传递上的键值在抛出QKeyEvent事件时做了处理,所以没有重复键值,因此这次是在Windows系统下编程,就有点想当然了,当发现键值重复时总是认为键盘硬件可能出了问题。
直到专门做了一个键值检测程序,在Win7上运行发现使用key()时,比如左右shift键的键值是一样的,但是看了下手册,它们的nativescancode()却是不一样的,于是就采用nativescancode()来区分不同的按键,果然是可以的。
这也说明,有空要多看下手册,多做点实例程序。
问题一:
使用QKeyEvent的e->key()来获取键值
void Widget::keyPressEvent(QKeyEvent *e)
{
int key = e->key();
qDebug()<<key;
}
但键盘上左右功能键,获取的键码是一样的,比如左右shift键、左右ctrl键以及左右alt键,编码一样,如何区分?
解决:
如果是在Windows/Linux系统中,请使用QKeyEvent::nativescancode()来区分键值,这样就是唯一的;
但是这个函数在MacOS下不能用。
【2017-06-06】Qt中的键盘事件:QKeyEvent及相关处理函数的更多相关文章
- Qt中的键盘事件,以及焦点的设置(比较详细)
Qt键盘事件属于Qt事件系统,所以事件系统中所有规则对按键事件都有效.下面关注点在按键特有的部分: focus 一个拥有焦点(focus)的QWidget才可以接受键盘事件.有输入焦点的窗口是活动窗口 ...
- IOS中input键盘事件支持的解决方法
欢迎大家去我的网站详细查看http://genghongshuo.com.cn/ IOS中input键盘事件keyup.keydown.等支持不是很好, 用input监听键盘keyup事件,在安卓手机 ...
- QT 11 鼠标键盘事件添加
鼠标事件 void mousePressEvent(QMouseEvent *event); //单击 void mouseReleaseEvent(QMouseEvent *event); //释放 ...
- 初识Qt鼠标、键盘事件及定时器和随机数
1.新建Qt Gui应用,项目名称为“myEvent”,基类名称为QWidget,类名称为Widget. 2.widget.h文件中添加以下代码,该段代码中包含了三个事件函数和一个槽函数 privat ...
- PyQt学习随笔:PyQt中捕获键盘事件后获取具体按键值的方法
在PyQt中,如果要捕获键盘事件的具体按键,可以通过重写组件对象的keyPressEvent方法或event方法来捕获具体的按键,推荐使用keyPressEvent方法,因为event方法是一个通用事 ...
- 深入了解jquery中的键盘事件
很多时候,我们需要获取用户的键盘事件,下面就一起来看看jquery是如何操作键盘事件的. 一.首先需要知道的是: 1.keydown() keydown事件会在键盘按下时触发. 2.keyup() k ...
- Qt中窗口退出事件
窗口右上角的X按键会导致其在不给出任何提示的情况下直接退出, 当点击右上角的x按键时,会触发Qt中的一个事件处理函数:void QWidget::closeEvent ( QCloseEvent * ...
- JQuery中如何处理键盘事件
背景:比如在页面中,敲击回车键以后,实现登录功能,在之前的Winform开发时,也遇到过处理键盘事件的功能,比如游戏软件中,上下左右的移动等. 代码如下: $(document).keydown(fu ...
- js中获取键盘事件【转】
<script type="text/javascript" language=JavaScript charset="UTF-8"> 2 docu ...
随机推荐
- properties 资源文件读取
1. 在source中添加资源文件 resource.properties #FTP 相关配置 #FTP 的ip地址 FTP_ADDRESS=192.168.88.142 FTP_PORT=21 ...
- Hibernate处理一个实体映射多张相同结构的数据表--动态映射
[转自] http://blog.csdn.net/majian_1987/article/details/8725197 LZ在项目中需要处理这样一个业务,每天都有终端设备上传GPS位置信息到服务端 ...
- vue dev 环境下的跨域访问
概述:被dev环境下的跨域弄晕了好几天,build环境还在研究中 1.config--->index.js---->module.exports---->dev 2.在main.js ...
- PIE SDK定向滤波
1. 算法功能简介 定向滤波又称为匹配滤波,是通过一定尺寸的方向模板对图像进行卷积计算,并以卷积值代替各像元点灰度值,强调的是某一些方向的地面形迹,例如水系.线性影像等. 方向模板是一个各元素大小按照 ...
- strus2配置strus.xml问题-The content of element type "package" must match "(result-types?,interceptors?
搭建strus2项目,在配置strus.xml时候碰到了这个问题: The content of element type "package" must match "( ...
- golang context 剖析 1.7.4 版本
1. 内部结构之 - timerCtx . type timerCtx struct { cancelCtx timer *time.Timer // Under cancelCtx.mu. dead ...
- nginx配置多域名
http{ # 第一个虚拟主机 server { listen 80; server_name aaa.domain.com; #access_log logs/host.access.log mai ...
- 微信小程序转百度小程序修改
百度小程序对比微信小程序(最初版):[设备]项里没有内存监控.iBeacon.wifi.蓝牙.用户截屏.手机联系人.NFC[位置]项里没有打开地图选择位置[界面]项里没有绘图功能.没有节点信息获取功能 ...
- js中的break,continue,return
js中的break,continue, return (转) 面向对象编程语法中我们会碰到break ,continue, return这三个常用的关键字,那么关于这三个关键字的使用具体的操作是什么呢 ...
- C#异步编程模型
什么是异步编程模型 异步编程模型(Asynchronous Programming Model,简称APM)是C#1.1支持的一种实现异步操作的编程模型,虽然已经比较“古老”了,但是依然可以学习一下的 ...