基于QT的Qtopia图形用户界面的改进

2019-07-13 03:58发布

四.基于QT的Qtopia图形用户界面的改进  
    Qtopia是Trolltech面向嵌入式Linux的综合应用平台。Qtopia包含完整
的应用层、灵活的用户界面、窗口操作系统、应用程序启动程序以及开发框架。它基于QT/Embedded的C++类库,拥有统一的应用程序编程接口,支持多任务管理,实用性强。下面是针对几个有特定功能的点作的改进:  
1、  SD卡控制管理界面  
一般情况下,外部设备的热拔插体现到用户界面上就是用户必须能通过软件控制硬件的插入或拔出,或者知道硬件的状态。这里我们以SD卡的即插即用管理为对象,实现一个能够控制SD卡热拔插的用户控制界面。为了实现SD卡的即插即用,可以在Qtopia环境下增加了一个系统图标,该图标用来显示当前卡的状态,另外还提供给用户拔插卡的一个软件接口。当卡插入系统时,Qtopia环境的左下角会出现一个SD卡的标志,以提醒用户,当前卡的存在。当用户想要拔出卡的时候,用户需要点击图标,选择”Eject SD”。系统图标消失之后,用户就能直接拔掉SD卡而不用关闭电源。实现这个功能需要做两方面的工作: 1) 捕获硬件插入或拔出信号。 
2) 接收信号后做适当的前台与后台处理。 
对于信号的捕获,相当于CPU处理外部信号一样,软件也有相当于轮询和中断的两种方式。对于轮询,程序周期对某个变量进行判断,该方式需要浪费不必要的CPU资源。对于中断,程序对相应的信号量进行down操作。当硬件信号发生的时候,由中断服务程序对这个信号进行up操作。这个方法在多道操作系统中得到了广泛的应用。但是,对于Qtopia,它在Linux中仅仅是一个进程,而系统图标运行于Qtopia的程序空间,如果该进程空间执行down操作,将会挂起整个Qtopia环境。所以,在系统中使用类似于轮询的机制,使用SD卡底层提供的字符文件接口的IOCTL方法的RROB_IN,每隔两秒钟查看一次SD卡的状态。  
当检测到卡存在的时候,就把SD卡的快设备驱动程序加载进内核,使用mount系统调用加载文件系统,然后对界面发出绘画信号,将SD卡图标显示出来。当用户选中SD卡图标的Eject SD时,首先对卸载文件系统,把块设备驱动程序卸载出内核,以释放系统的资源,然后对界面发送hide消息,将SD卡的图标抹除。  
该功能利用已有模块的编程接口,编写了一个方便用户使用的中文拼音输入法,为嵌入式图形用户界面改进的第三种方法。 
2、  中文拼音输入法  
对于Qtopia来说,它提供了中文的内码字库,使得Qtopia能够支持中文的显示。但是,它并没有提供一个方便的从内码到外码转换的中文输入法。所以,为用户添加一个中文输入法是非常有必要的。Qtopia在输入方法方面提供了如下的接口: