日志
QWSKeyEvent的学习
2013-04-16 15:27
基于嵌入式Qt的事件响应设计
在前述的客户/服务器系统结构中,每个键的按下、释放都以QWSKeyEvent事件发出。一个QWSKeyEvent事件通常包括以下各域: Unicode:Unicode值。 Keycode:Qt键码值,定义在qnamespace.h头文件中。 Modifier:位域, 包括Qt::ShiftButton,Qt::ControlButton和Qt::AltButton。 Is press:键按下时为真,释放时为假。 Is auto repeat:键处于自动重复状态时为真。 嵌入式Qt处理键事件的过程为:键盘驱动程序负责从设备中读取数据,并将键事件发送到服务器中。当服务器从键盘驱动程序接收到一个键事件时,它首先要经过一个事件过滤器,然后再将其发送至每个客户进程,最后由客户进程负责处理键事件,并将其发送到适当的窗口。具体流程如图3所示。 这里,键事件未必都来自键盘设备,包括触摸屏,触笔都可以产生键事件。服务器在任何时候都可以调用函数QWSServer::sendKeyEvent()产生键事件。根据这个特点,再结合事件过滤器的特性,便可构造出所需的输入服务器平台。 在Qt中,一个事件通过调用QObject::event()被发送到继承自QObject的对象。事件发送就是一个事件已经产生,由QEvent正好去表达,且QObject需要去回应。多数事件来自窗口系统类QWidget,如QMouseEvent,QkeyEvent事件。某些事件来自其他源头,如QTimerEvent,而某些来自应用程序,Qt会一视同仁的处理。 事件过滤器在目标对象处理之前去处理事件。过滤器通过调用QObject::eventFilter()实现,它可以接受或丢弃过滤,也可容许或拒绝进一步去处理事件。如果所有的事件过滤器允许进一步的处理事件,事件自己就被送达目标对象。本文在服务器进程中安排事件过滤器,接收键事件,经过处理后,将结果发送到客户进程。在客户进程中,处理键事件,并发送到适当的窗口中。 |
下一篇: Qt4库裁剪
上一篇: Linux /dev/fbo/的入门学习