Qt/E中的键盘设备管理

转载请注明出处:
http://www.cnblogs.com/baizx/

键盘设备在Qt中表现为QWSKeyboardHandler的一个实例,为了支持各种各样的键盘设备,Qt提供了QWSKeyboardHandler接口,各种键盘设备只需要在收到底层操作系统键盘设备的按键以后调用QWSKeyboardHandlerprocessKeyEvent函数即可将键盘信息传递到Qt系统中,然后由QWSServer分发给适当的客户端。QWSKeyboardHandler最重要的函数就是提供了processKeyEvent,方便其子类调用该函数将键码传递到Qt系统中。列出了Qt预置的所有的键盘驱动,详细信息可以参考Qt官方帮助文档。


2- 6 QWSKeyboardHandler继承关系图

如果要实现自定义的键盘设备,那么可以通过继承QWSKeyBoardHandler来实现,主要工作分为两部分,一部分是设备初始化,另外一部分工作就是等待用户按键,并将信息传递到qt系统。

具体流程可以参照下图:

                                    

底层键盘设备已经由驱动负责了,这里只需打开设备,并监听设备描述符,将可读信号关联到自定义的slot上,当有按键数据可读取时直接进行读取。

notifier = new QSocketNotifier(kbdFD, QSocketNotifier::Read, this);

connect(notifier, SIGNAL(activated(int)),this,SLOT(readKeyboardData()));

另外一部分工作就是等待用户按键,并传递到qt系统内部。见下图

                                                                           

从底层键盘设备读取出来的数据格式可能各种各样,如果符合Linux标准输入输出接口,那么就不用做任何改动, 但是经常我们会有一些特殊的按键设置,必须进行一定的转换,这些工作就要在此步完成。然后由


void QWSServer::processKeyEvent ( int unicode, int keycode, Qt::KeyboardModifiers modifiers, bool isPress, bool autoRepeat )   [static]


这是一个静态函数,因此可以直接使用,这些参数中最重要的是keycode,要将自定义的按键值转换为Qt内部的键码,比如:Qt::Key_Delete等等,modifiers是用于组合按键,像ctrl,shift的处理。第一个参数unicode一般没用, 可以忽略。

Qt中键盘驱动是通过环境变量QWS_KEYBOARD来确定,如果没有则使用默认的,如果有则使用用户指定的,使用方法和Qt中的鼠标设备一样,可以参考

http://www.cnblogs.com/baizx/archive/2010/04/08/1707790.html


posted on 2010-07-20 14:03  baizx  阅读(1830)  评论(0编辑  收藏  举报