Qt/Embedded for Linux 应用开发案例

1、开发环境的构建
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 (注意安装位置的读写权限,不然会失败)

2、应用设计及编码
推荐使用Qt提供的QtCreator IDE进行编码开发,在Qt的官网上能够直接下载到二进制的bin文件,直接安装就行了
    ./qt-creator-linux-x86-opensource-2.4.1.bin
由于它与Qt的库进行了完美的集成:从编码到调试,从项目管理到帮助文档,以及跨平台开发,能够极大地提升Qt
应用开发的效率。

编码完成后先在主机上进行调试,保证能够正确地实现全部的功能后,再移植到目标平台上进行调试、测试,这一
步在QtCreator上能够很轻松地完成。

3、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进行图形界面的绘制与管理)
    
4、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/。
若是构建出错或者运行出错,那应该是配置出问题了,须要返回到上面的配置步骤进行检查与修改。

5、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文件经测试也没法显示中文,不知道什么缘由)

6、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中的插入->符号界面中的子集下拉表。
相关文章
相关标签/搜索