首页 > 代码库 > 【2017-06-06】Qt中的键盘事件:QKeyEvent及相关处理函数
【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及相关处理函数