qt for embedded linux | qt 5.4,Qt/Embedded for Linux 应用开发案例

本文详细介绍了如何构建Qt的桌面版和嵌入式版开发环境,包括配置目标类型、交叉编译器设置以及安装步骤。接着讨论了使用QtCreator进行编码开发的便利性,并阐述了在开发板上测试QTE应用的方法,包括安装库、配置环境变量等。此外,还探讨了QTE库的自定义配置以减小库的大小和资源消耗,以及中文显示的实现。最后,提到了qvfp和makeqpf这两个工具的使用,用于模拟帧缓存测试和字体转换。
摘要由CSDN通过智能技术生成

一、开发环境的构建

1.下载Qt源代码,包括桌面版和嵌入式版

如4.7.4版:qt-everywhere-opensource-src-4.7.4.tar.gz

qt-everywhere-opensource-src-4.7.4[embedded].tar.gz

解压缩到当前目录:tar -xzvf qt-everywhere-opensource-src-4.7.4.tar.gz

2.编译安装桌面版和嵌入式版

桌面版一般为默认配置安装:./configure ; sudo make; sudo make install;

嵌入式版安装作为开发用,也一般可以为默认安装,但必须指定目标类型与主机类型

(1) 首先需要指定目标类型,利用现有的或者修改、添加目标类型

a.进入mkspecs/qws/文件夹中:cd mkspecs/qws

b.找到你的目标类型文件夹并且拷贝一份:cp linux-arm-g++ linux-omapl138-g++ -a

c.进入你的目标文件夹中以修改qmake.conf配置文件,主要是修改交叉编译器:

cd linux-omapl138-g++;gedit qmake.conf

修改文件中的如下内容以符合你的交叉开发环境:

# modifications to g++.conf

QMAKE_CC                = arm-none-linux-gnueabi-gcc  (交叉编译器)

QMAKE_CXX               = arm-none-linux-gnueabi-g++

QMAKE_LINK              = arm-none-linux-gnueabi-g++

QMAKE_LINK_SHLIB        = arm-none-linux-gnueabi-

# modifications to linux.conf

QMAKE_AR                = arm-none-linux-gnueabi-ar cqs

QMAKE_OBJCOPY           = arm-none-linux-gnueabi-objcopy

QMAKE_STRIP             = arm-none-linux-gnueabi-strip

保存修改,完成目标配置文件的添加,回到qt主目录.

(2)执行configure进行安装前的配置,它会自动执行qt的qmake,读取各工程依据配置选项生成makefile文件

(echo o ; echo yes ) | ./configure \

-prefix /home/realtimedsp/703-project/tools/qte-4.7.4-703 \     (指定安装目录)

-embedded arm -platform /qws/linux-x86-g++ -xplatform /qws/linux-omapl138-g++ \  (指定目标)

-depths 16,24,32   (指定颜色深度)

(3)配置结束后,就是编译安装了:make; make install (注意安装位置的读写权限,否则会失败)

二、应用设计及编码

推荐使用Qt提供的QtCreator IDE进行编码开发,在Qt的官网上可以直接下载到二进制的bin文件,直接安装就好了

./qt-creator-linux-x86-opensource-2.4.1.bin

因为它与Qt的库进行了完美的集成:从编码到调试,从项目管理到帮助文档,以及跨平台开发,可以极大地提高Qt

应用开发的效率。

编码完成后先在主机上进行调试,保证可以正确地实现所有的功能后,再移植到目标平台上进行调试、测试,这一

步在QtCreator上可以很轻松地完成。

三、QTE应用的开发板测试

(1)首先需要在开发板上安装QTE的动态库,这样QTE应用才能正确地运行起来

a.从之前安装的嵌入式QT版本文件夹中拷贝库目录:lib/ 目录到开发板使用的文件系统中,建议存放位置:

/opt/QTE/

b.配置环境变量,以使应用程序找到QTE的动态库文件:

(可以把下面的配置写到profile文件中,也可以写成一个脚本)

export QTEDIR=/opt/QTE/

export LD_LIBRARY_PATH=$QTEDIR/lib:$LD_LIBRARY_PATH

export QWS_SIZE=640x480

c.然后把交叉编译好的QTE应用下到开发板的文件系统上,并且通过超级终端之类的方式在开发板上运行应用

./EST703 -qws   (必须加上-qws选项,以指定应用自身作为QTE的Server进行图形界面的绘制与管理)

四、QTE库的自定义配置(QTE库的裁减)

通过指定应用使用了的特性,裁减掉不需要的特性来自定义QTE,从而降低QTE动态库的大小,降低资源的消耗。

当应用的功能测试及调试已经基本完成以后,就可以开始进行应用的性能的测试与调试了。

性能的测试与优化主要可以从两个方面入手:

1.QTE的动态库的裁减优化

2.应用自身的代码重构优化

这里主要说明一下QTE库的裁减配置:

(1).配置工作主要是在执行./configure这一步骤上,通过指定相应的选项与配置文件来生成自定义的makefile

文件,之后的编译与安装步骤和前面一样:make;make install;

(2).configure命令有很多的选项,大部分的选项可以从字面理解其作用与含义,可以通过./configure --help

命令查看所有的选项及其说明。在不是完全熟悉的情况下,建议把其导出到文件以方便随时查看:

./configure --help > qteconf_help.txt

(3).配置工作主要是裁减掉不需要的特性,也就是指定 -no-* 形式的选项,这需要根据具体的项目应用进行具体

的配置,当然必须对各选项的特性是什么了解清楚。(多查看选项帮助中的说明)

(4).configure的选项配置示例(703A):

(echo o ; echo yes ) | ./configure \

-prefix /home/realtimedsp/703-project/tools/qte-4.7.4-703 \

-embedded arm -platform /qws/linux-x86-g++ -xplatform /qws/linux-omapl138-g++ \

-depths 16,24,32 \

-no-largefile \

-release \

-fast \

-no-dbus \

-no-sql-sqlite \

-qt-libpng \

-qt-freetype \

-little-endian -host-little-endian \

-no-svg \

-no-qt3support \

-no-libtiff -no-libmng \

-no-mmx -no-sse -no-sse2 -no-sse3 \

-no-3dnow \

-no-openssl \

-no-phonon \

-no-opengl \

-no-cups \

-no-qvfb \

-no-gif \

-no-webkit \

-no-javascript-jit \

-no-script \

-no-xmlpatterns \

-no-kbd-tty -no-kbd-linuxinput -no-kbd-qvfb -no-kbd-qnx \

-no-mouse-tslib -no-mouse-pc -no-mouse-linuxtp -no-mouse-linuxinput \

-no-mouse-tslib -no-mouse-qvfb -no-mouse-qnx \

-no-xcursor -no-xfixes -no-xrandr -no-xrender \

-nomake examples -nomake tools -nomake docs -nomake demos (5).配置选项是从一个比较大的粒度去裁减QTE库的功能特性,如果需要从一个更小更细的粒度去定制QTE库,那就

需要编辑qconfig-xxx.h配置文件,通过定义各种特性宏(features)来裁减QTE库了。

a.首先找到并进入相应的文件所在目录,主要是:qconfig-xxx.h类文件以及features.txt文件

cd src/corelib/global/

>>features.txt文件对可以进行配置的所有特性进行了一个简单的说明,在进行配置时,随时查看该文件是个良好的

习惯,尤其要注意的是文件中每个特性的 Requires: 字段,它指定了该特性对其它特性的依赖关系,一旦你的配

置没有满足这个依赖关系,那么你将可能无法编译成功QTE库,或者编译成功但是无法运行应用。

>>Qt默认提供了5个qconfig-xxx.h的配置文件,从裁减特性多到少排序依次为:

qconfig-minimal.h     qconfig-small.h     qconfig-medium.h     qconfig-large.h     qconfig-dist.h

通过查看这些文件可以发现,其只是进行一个宏的定义,难度在于清楚哪些特性是需要的,哪些可以#define掉。

b.新建一个工程自己的配置文件,如:qconfig-703.h,从上面五个配置文件中拷贝一下内容到该文件,如从

qconfig-minimal.h拷贝,然后配置特性:

>>取消对应的宏定义,如果应用需要该特性;

>>增加对应的宏定义,如果应用不需要某个特性.

如703A中显示不需要鼠标指针,所以需要如下的宏定义:

#ifndef QT_NO_QWS_ALPHA_CURSOR

# define QT_NO_QWS_ALPHA_CURSOR

#endif

#ifndef QT_NO_QWS_CURSOR

# define QT_NO_QWS_CURSOR

#endif c.编辑好qconfig-703.h配置文件后,把它添加到./configure配置选项的后面,即在上面的选项最后添加:

-qconfig 703

然后就可以开始配置、编译与安装了.

(6).安装成功后,就可以使用其进行应用的构建与开发板运行了。记得要用该版本的lib/替换掉开发板上

之前的lib/。

如果构建出错或者运行出错,那应该是配置出问题了,需要返回到上面的配置步骤进行检查与修改。

五、QTE应用中文显示

在开发板上实现应用的中文显示是一个稍微麻烦的事情,因为嵌入式os一般缺乏必要的中文字体库与相应的编码

识别。因此解决中文显示主要是两个工作:

1.确定QTE应用代码中中文编辑使用的编码是什么,也就是你的代码编辑环境中字符编码是什么。QtCreator平台中

默认的字符编码是UTF-8.

>>然后在main.cpp中指定对应的编码解释:(记得对中文字符串使用tr()函数)

QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

2.确定开发板的文件系统上是否有中文字体库(一般是没有的),在开发板的Qt库目录下添加中文字体库,即前面的:

/opt/QTE/lib/fonts目录下。

linux平台上的中文字体库不多,比较常用的是文泉驿字体,可以从网上下载,它是开源的。我下载使用的是:

wqy-zenhei-0.9.45.tar.gz

解压缩,把里面的wqy-zenhei.ttc字体库文件拷贝到上面的fonts目录里面就可以了。

通过这两个步骤就可以实现中文的显示了。

(1.网上说ttf字体文件也是可以的,可是我从windows的字体文件夹中拷贝一个测试了一下,无法显示中文;

2.网上很多提到qpf文件是最佳中文字体显示选择,Qt默认提供了unifont_160_50.qpf中文字体文件,可是我测试

了多次都无法显示中文,而且我从网上下的wenquanyi的几个qpf文件经测试也无法显示中文,不知道什么原因)

六、Qt中各种工具的使用:qvfp与makeqpf

Qt的主目录下有一个tools文件夹,里面提供了一些有用的工具的源代码,可以通过安装好的桌面Qt开发环境编译

生成这些工具的二进制程序。源代码中有.pro项目文件,可以直接打开、构建,构建好后,把对应的二进制程序

拷贝到Qt安装目录下的bin/文件夹下,这样就可以直接在终端执行这些工具了。

qvfp与makeqpf是tools里面的两个工具:

qvfp————提供虚拟帧缓存的实现与管理,从而使得移动Qt应用可以在桌面环境中进行仿真式的测试。

makeqpf————qpf字体文件的生成工具,可以转换ttf字体文件为qpf2格式的Qt自带的字体文件格式。

(1).qvfp的使用

a.首先运行qvfp工具,指定相应的选项:

Usage: qvfb [-width width] [-height height] [-depth depth] [-zoom zoom][-mmap] [-nocursor]

[-qwsdisplay :id] [-x11display :id] [-skin skindirectory]

Supported depths: 1, 4, 8, 12, 15, 16, 18, 24, 32

示例:qvfp -width 640 -height 480 -depth 16,24,32 -nocursor

b.然后运行你的嵌入式Qt应用程序,运行方式和在开发板上一样,即需要加上 -qws 选项,这样应用才能使用qvfp

提供的虚拟帧缓存。(使用下面安装的x86目标库构建你的Qt应用)

>>这里的应用程序必须是使用嵌入式的Qt库构建的,但是要使应用能在桌面(x86)环境上运行,就必须是x86目标,

因此这里必须编译安装一个x86目标的嵌入式Qt库。过程和前面的arm目标库安装是基本一致的。配置如下:

(echo o ; echo yes ) | ./configure \

-prefix /home/realtimedsp/703-project/tools/qte-4.7.4-x86 \

-embedded x86 \

-depths 16,24,32 \

-qt-gfx-qvfb \

-no-gif \

-no-webkit \

-no-javascript-jit \

-no-script \

-no-xmlpatterns \

-qt-kbd-qvfb \

-qt-mouse-qvfb \

-nomake examples -nomake tools -nomake docs -nomake demos 因为要使用qvfp进行测试,所以配置选项中的:-qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb是必须的。

(2).makeqpf的使用

a.运行makeqpf工具,不用输选项,然后出现图形界面,选择想要转换的字体,指定字体大小、权重、是否斜体,

进行转换就好了

b.界面的第二部分是各种字符集,可以参考word中的插入->符号界面中的子集下拉表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值