2017-06-06Qt中的键盘事件:QKeyEvent及相关处理函数

Posted waitingdeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017-06-06Qt中的键盘事件: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-06Qt中的键盘事件:QKeyEvent及相关处理函数的主要内容,如果未能解决你的问题,请参考以下文章

QT 捕获事件(全局拦截)

qt的键盘事件

如何在 Qt 应用程序中生成按键事件到系统(win7)(模拟用户在键盘上按键)?

qt中重写键盘事件冲突了

Qt事件机制(是动作发生后,一种通知对象的消息,是被动与主动的总和。先处理自己队列中的消息,然后再处理系统消息队列中的消息)

Qt(Ubuntu)怎么实现模拟鼠标事件和键盘事件?