【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 ...
随机推荐
- c# 实现无符号右移
/// <summary> /// 无符号右移, 相当于java里的 value>>>pos /// </summary> /// <param nam ...
- vue $index,$key已经移除了
之前可以这样: <ul id="example"> <li v-for="item in items"> {{$index}} {{$k ...
- Linux——【rpm、yun、源码包】安装
RPM包或者安装源码包 在windows下安装一个软件很轻松,只要双击.exe的文件,安装提示连续“下一步”即可,然而linux系统下安装一个软件似乎并不那么轻松,因为我们不是在图形界面下.所以我们要 ...
- twitter storm学习 - 安装部署问题汇总
已经碰到的或者将来碰到的关于安装部署方面的问题以及解决方法,先挖个坑 1.提交的topology在admin界面上看emitted始终都是0,查看日志发现有如下错误: worker [ERROR] E ...
- jacob自己动生成word文档目录
任务目的 1自动生成word文档目录. 用例测试操作步骤 在一个word文档的第二页填写占位符: {目录}保存.调用程序读取目标文档,自动根据标题生成目录到{目录}位置. 效果 关键代码 insert ...
- HTML5之WebSocket && https://zhuanlan.zhihu.com/p/23467317
在认识websocket之前,我们必须了解的是websocket有什么用? 他能解决我们遇到的什么问题? 如果没用,那么我们就么有使用它的必要的. websocket就是建立起全双工协议的,提高了效率 ...
- 从XCodeGhost事件看软件来源鉴别的重要性
事件 事件引爆于9月18日乌云网公布的一则分析报告:"XCode编译器里有鬼 – XCodeGhost样本分析",这份纯粹的技术分析报告引发中国iOS生态链的众多开发者的关注. 引 ...
- Javascript模块化编程(二)AMD规范(规范使用模块)
这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块,先想一想,为什么模块很重要?接下来为您详细介绍,感兴趣的朋友可以了解下啊.今天介绍如何规范地使用模块. 七.模块 ...
- 从零开始写C# MVC框架之--- 项目结构
框架总分2个项目:Web开发项目.帮助类项目 (ZyCommon.Zy.Utilities) 1.ZyCommon,是Web开发项目结构.新建一个空解决方案,再建Data.Service.ZyWeb解 ...
- asp.net FileUpload上传文件夹并检测所有子文件
1.在FileUpload控件添加一个属性 webkitdirectory=""就可以上传文件夹了 <asp:FileUpload ID="FileUpload1& ...