一、开发环境的构建
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中的插入->符号界面中的子集下拉表。