半导体激光器驱动电源的嵌入式GUI开发
2.2软键盘的调用
文中设计的软键盘包括字母、数字的输入、大小写字母的切换以及退格、回车等功能。在Linux环境的QtDesigner下,创建一个新的Widget,将Buttons选项中的PushButton按键拖入到软键盘区域内,然后根据需要修改每个按键上面的文本属性和名字属性。
软键盘的实现是基于信号与槽机制。利用Qt的多信号映射机制,首先使用QSignalMapper类来捆绑不同按键所发送的一系列无参数信号,并将其转化为有参数的信号,实现一个函数可以响应不同按钮的功能;然后需要建立每一键值对应的信号与槽之间的关系connect(ui->pushButton,SIGNAL(clicked()),码值信号调用sendCharacter(QChar)槽,从而实现正确的键值输入。界面设计如图2所示。
图2软键盘界面
Qt设计师窗口部件简单有限,某些情况下要自定义窗口部件。它有两种方法:改进法和插件法。插件法需要创建一个插件库,它为可选的额外功能提供了一个特殊接口。Qt设计师运行时可以加载这个库,并且利用该库创建窗口部件的实例,本设计自定义了三个窗口部件QMeter、thermometer和led.
3程序的移植和发布
安装了交叉工具链以及经过交叉编译的Qt/E库后,就可以将前面编辑好的应用程序进行交叉编译生成可执行二进制文件,然后发布到嵌入式控制板中。另外,在发布之前需要先移植tslib和Qt/E库,tslib是电阻式触摸屏用于校准的一个软件库,是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。解压根文件系统到home路径下,复制编译好的tslib、Qt/E库文件到根文件系统中,最后导出相应的环境变量。应该程序可以以界面图标的形式运行,这时,就需要自己制作启动器文件,在for-linx/web/lighttpd/webpages/apps目录下新建current.desk-top文件,然后编辑该文件:
#!/usr/bin/env xdg-open
[Desktop Entry]
Name=Serial
GenericName=Demo App
Icon=/forlinx/web/lighttpd/webpages/apps/images/current.png
Exec=/forlinx/web/lighttpd/webpages/shell/current.sh
Type=Application
ProgramType=gui
current.png是一个32×32的PNG图标文件,可根据自己的需要制作并存于相应路径下。交叉编译生成的二进制文件current放于forlinx/qt/bin目录中。current.sh是编写的shell脚本,当用户点击界面图标时会自动执行脚本文件里的命令:
#!/bin/sh
if test -e /dev/fb0;
then
width=′fbset | grep′geometry′| awk′{print $2}′′
height=′fbset | grep′geometry′| awk′{print $3}′′
let height=height-38
geo=′echo $width\x$height+0+0′
fi
pidof matrix_gui > /dev/null 2>
if [ $? == 0 ]
then /forlinx/qt/bin/serial -geometry $geo$*
else
export TSLIB_TSDEVICE=/dev/input/touchscreen0
export QWS_MOUSE_PROTO=Tslib:/dev/input/touchscreen0
/forlinx/qt/bin/current -qws -geometry $geo$*
fi
如果需要开机自动运行程序,可以编辑启动时的执行文件/etc/init.d/rcS,将启动程序路径和可执行应用程序名添加到这里,就可以实现系统启动时程序的自动运行,在嵌入式主板上运行效果如图5所示。
4结语
嵌入式系统的实时性、高可靠性以及友好高效的GUI被广泛用于工业控制当中。基于Qt/Embedded设计的嵌入式控制界面实现了与单片机的串口通信、文字的编辑、控件的载入和显示、数据的保存记忆、软键盘的调用等功能。本文根据光纤激光器泵浦源的特点,以设计泵浦源驱动的人机交互界面为前提,结合用户需求和Qt/Embedded特点来开发嵌入式控制面板。详细介绍了基于Qt/Embedded的嵌入式应用程序的开发过程,并成功移植到嵌入板中控制LD正常工作。
- 用8位微处理器实现数字低通滤波器设计(05-15)
- 如何构造嵌入式Linux系统(05-23)
- 基于嵌入式Linux的便携式RFID信息采集与处理系统(07-01)
- SPARC微处理器综述(05-29)
- Motorola32位嵌入式微处理器MPC860的开发应用(06-02)
- 基于ARM和uClinux的家庭网关系统(09-14)