新闻中心

EEPW首页>嵌入式系统>设计应用> 嵌入式Linux中基于Qt/Embedded的键盘接口设计

嵌入式Linux中基于Qt/Embedded的键盘接口设计

作者: 时间:2011-01-13 来源:网络 收藏


3 Qt/Embedded输入策略
3.1 Qt/Embedded架构简介
Qt/Embedded Linux应用程序需要一个正在运行着的服务器应用或者是本身就是一个服务器应用程序。任何一个Qt/Embedded Linux应用程序都可以扮演服务器的角色。当多于一个应用程序运行的时候,应用程序作为客户端与服务器程序相连接。
服务器进程和客户端进程有不同的分工:服务器进程管理着鼠标指针的处理、字符的输入和屏幕的输出。另外服务器还控制着屏幕光标的输出和屏幕保护程序。客户端进程完成所有应用程序的具体操作。一个QWSServer类的实例代表一个服务器应用,一个QWSClient类的实例代表着一个客户端应用。每一方面都有一些类完成各种操作。
所有系统产生的事件包括事件和鼠标事件都被传递到服务器应用中,然后服务器将这些事件分发到客户端应用中。
3.2 客户端/服务器的通信
如图3所示,正在运行着的程序通过增加和删除窗口不断地改变屏幕的显示。服务器在对应的QWSWindow对象中维护着每一个顶层窗口的信息。每当服务器接收到一个事件时,它都会查询它的顶层窗口列表找到包含该事件位置的窗口。每一个窗口都有一个创建它们的客户端应用的ID,将这个ID返回给服务器。最后服务器将这个事件封装成一个QWSEvent类的实例,传递给相应的客户端。

c.JPG
另外还可以通过QWSServer::KeyboardFilter类实现按键事件的全局的底层过滤器。这种方法可以实现电源管理中的一键挂起,而不用在所有的应用程序中都对这个按键事件进行过滤。
如图4所示,服务器通过UNIX域套接字与客户端进行通信。客户端从服务器接收事件,这些事件通过重新实现QApplication的qwsEvent-Filter()函数可以被直接检索访问。

d.JPG
客户端相互之间(和服务器)通过QCopChannel类通信。QCOP用于在多个通道间传送信息,是一个多对多的通信协议。每个通道用名字作为识别 ID,任何一个想要和它通信的通道都能监听它。QCOP协议既允许在相同的地址空间内的客户端之间进行通信,也允许在不同的进程的客户端之间进行通信。
3.3 字符输入层
如图5所示,当一个服务器应用程序开始运行时使用Qt的插件系统加载驱动,驱动是一个QWSKeyboardHandler类的实例。

e.JPG
键盘驱动从设备接收键盘事件,并把事件封装成一个QWSEvent类的实例,然后把这个类传送给服务器。定制键盘可以通过子类QWSKeybo- ardHandler类创建一个键盘驱动插件来实现。默认的QKbdDriverFactory类将自动检测到这个插件然后把驱动加载到正在运行的服务器应用中。

4 键盘驱动插件的实现
本文通过Qt的插件系统实现了矩阵键盘的驱动。插件是一种遵循一定规范的应用程序编写出来的程序。在现代计算机语言中,应用环境复杂多变,常常要面临着适应这样那样的未知需求的挑战,为了使程序设计语言具有良好的可扩展性,使之能够适应复杂的应用环境,同时也出于降低设计复杂性的考虑,采用插件机制是一个很不错的方法。通过采用插件系统,把扩展功能从框架中剥离出来,可以降低框架的复杂度,让框架更容易实现。扩展功能与框架之间以一种松耦合的方式集成,允许在保持不变的情况下,实现彼此的独立变化。
Qt提供了两种插件:一种是高层的插件,用来扩展Qt自身,如自定义数据库驱动、图像格式、文本编解码器、自定义风格等;一种是底层的插件,用来扩展Qt应用程序。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)


关键词:键盘接口嵌入式

评论


相关推荐

技术专区

关闭