关于嵌入式 Qt 最全最棒的教程(万字干货)

重要:

本文摘自致远电子出品书籍《嵌入式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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值