重要:
本文摘自致远电子出品书籍《嵌入式Linux开发教程》,本教程凝聚了ZLG致远电子嵌入式工程师的心血,任何形式的转载请务必标注此段文字!!!
整理排版:付斌,来源:ZLG致远电子,作者:致远电子
常见的嵌入式Linux图形界面有Qt/Embedded、DirectFB、MicroWindows/NanoX、MiniGUI和OpenGUI等,每个GUI都有各自不同特点和应用场合,在应用编程上也各不相同。
本文将介绍嵌入式Qt的基础编程,从环境搭建入手,然后介绍了qmake工具以及Qt Creator,紧接着给出Qt常见部件编程和范例,最终以一个经典的贪食蛇游戏在Qt上的实现为例,对前面介绍的编程进行综合。
01
Qt和Qt/Embedded
Qt介绍
Qt是一个跨平台应用程序和UI开发框架。使用Qt只需一次性开发应用程序,无需重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。Qt原为奇趣科技公司(Trolltech,www.trolltech.com)开发维护,现在被Nokia公司收购。目前在Nokia的推动下,Qt的发展非常快速,版本不断更新。目前最新的Qt主版本为5.4,所支持的平台如图1所示。
1 Qt支持的平台
注:本文使用的版本为4.7.3,由于qt 5 和qt 4编程方面有些差别,且市面上大多数都是qt4编程的资料,qt5的相对较少,所以建议使用qt4进行编程开发。
Qt/Embedded介绍
嵌入式Linux发行版上的Qt属于Qt的Embedded Linux分支平台(本文简称为Qt/E)。Qt/E在原始Qt的基础上,做了许多出色的调整以适合嵌入式环境。同桌面版的Qt/X11相比,嵌入式的Qt/E很节省内存,因为它不需要X server或是Xlib库,它在底层摒弃了Xlib,采用Framebuffer(帧缓冲)作为底层图形接口。Qt/E的应用程序可以直接写内核帧缓冲,这避免开发者使用繁琐的Xlib/Server系统。
Qt/E所面对的硬件平台较多,当开发人员需要在某硬件平台上移植Qt/E时,需要下载Qt源代码,利用交叉编译器编译出Qt库,接着需要将Qt库复制两份,一份放置在开发主机上,供编译使用,一份放在目标板上,供运行时动态加载使用。具体流程如图2所示。
2 编译Qt库流程图
02
Qt/Embedded交叉编译环境的搭建之环境介绍与安装
环境介绍
主机系统:Ubuntu 12.04 32-bit;
交叉编译环境:arm-none-linux-gnueabi;
开发板:EasyARM-i.MX283A;
安装文件目录结构:/home/vmuser/nfs_shared用于开发板的挂载PC机的路径。
安装tslib1.4
在采用触摸屏的移动终端中,触摸屏性能的调试是一个重要问题之一,因为电磁噪声的缘故,触摸屏容易存在点击不准确,有抖动等问题。
tslib是一个开源程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖动、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。
如果不采用触摸屏,可以不安装该库,跳过这一小节。
1. 准备工作
确保已安装autoconf、automake和libtool。如果没有安装,或者不确定,可输入下列命令进行安装:
注意:确保内核源码目录下的include/linux/input.h的EV_VERSION值与交叉编译工具定义的EV_VERSION值一致(本例为arm-none-linux-gnueabi/libc/usr/include/linux/input.h),不然在开发板上tslib会报告“selected device is not a touchscreen I understand”错误。
2. 下载源码
从网上下载tslib源代码,本文以tslib-1.4.tar.gz为例。下载后,得到tslib-1.4.tar.gz,解压,如下命令:
$ tar -zxvf tslib-1.4.tar.gz
3. 配置
进入解压的目录,执行如下命令:
--prefix指定安装路径,用户可以自行指定tslib的安装目录。
--host指定交叉编译器,如果交叉编译器是arm-none-linux-guneabi-gcc,则指定arm-none-linux-guneabi。
4. 编译
执行make指令:
$ make
5. 安装
$ make install
编译生成的库,头文件等都拷贝到prefix指定的路径中。
如果可以看到该指定的路径下有4个文件夹:/bin、/etc、/lib、/include,则表示安装完成。
6. 修改ts.conf内容
为了在移植开发板的时候,可以制定输入模块,需要修改ts.conf文件的内容。
进入安装目录下的/etc/文件夹,修改ts.conf文件的内容。
$ vi ts.conf
找到#module_raw input那一行,去掉注释#,如下图3所示。
图3 ts.conf文件内容
注意:行首不要留空格,要顶格。
7. 移植到开发板
将安装路径下的tslib整个文件夹,下载到开发板上,本例子放置在开发板的/usr/local/下,如图4所示。
图4 开发板tslib路径
8. 设置开发板环境
通过串口软件(如本文使用的Tera Term),打开开发板的环境变量文件/etc/profile。
# sudo vi /etc/profile
在末尾添加如下内容:
其中TSLIB_ROOT更改为自己实际存放的tslib的绝对路径。
TSLIB_TSDEVICE和QWS_MOUSE_PROTO这两项需要查看自己的开发板触摸屏设备对应/dev/input/下的文件。
9. 执行测试命令
重新启动开发板,使系统重新读取/etc/profile的环境变量,进入tslib/bin目录,执行如下命令:
# cd /usr/local/tslib/bin
# ./ts_calibrate
如果开发板出现如图5所示界面,则至此,tslib的安装和移植已经成功完成。
可以执行该目录下的其他程序,体检触摸屏。
图5 5点触摸屏校准画面
03
Qt/Embedded交叉编译环境的搭建之编译qt4.7.3-arm
下载qt-4.7.3源码包(qt-everywhere-opensource-src-4.7.3.tar.gz),进入源码包的目录,然后解压缩,进入解压缩的目录,配置相应的选项内容保存到脚本build-qt里面,脚本文件内容如图6所示。
图6 build-qt文件
然后在该目录下的mkspec/qws/linux-arm-gnueabi-g++/qmake.conf文件添加-lts参数和在文件末尾添加如下两行:
实际操作后的效果如图7所示。
图7 qmake.conf文件内容
然后开始安装,具体命令如下:
注意:需要指定tslib相关文件的路径如:-I /home/zlg/nfs_shared/tslib/include –L /hone/zlg/nfs_shared/tslib/lib和-qt-mouse-tslib,另外配置之前确保g++已安装。
至于./configure 的选项可以通过./configure -help查看,并参照实际开发板,选择合适的选项。例如选项-prefix <安装路径>指定安装目录。
如果没有指定安装路径则默认安装在/usr/local/Trolltech/QtEmbedded-4.7.3-arm。
配置完成后,开始执行如下命令:
$ make
此处根据配置的选项,可能花费的时间比较久,需要耐心等待。
接下来执行如下命令进行安装:
$ make install
安装成功后,则可以在安装目录下查看到相关文件夹,如本例安装路径为/home/vmuser/nfs_shared/qt-4.7.3-arm,查看到有bin、imports、include、lib、mkspec、plugins、translations。
接下来就要移植到开发板上。
需要将安装目录下的lib和plugins移植到ARM开发板上,本例安装在/usr/local/qt-4.7.3-arm,所以在开发板上执行如下命令:
# mkdir /usr/local/qt-4.7.3-arm
通过NFS,将lib和plugins下载到开发板上。在开发板上执行的命令如下:
设置相应的环境变量,在开发板上执行如下命令:
# vi /etc/profile
然后在文件末尾追加如下内容:
04
Qt Sdk搭建
Qt SDK简介
Qt是一个跨平台的图形框架,在安装了桌面版本的Qt SDK的情况下,用户可以先在PC主机上进行Qt应用程序的开发调试&#x