版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
QT完全手册
嵌入式工具Qt的安装与运用
摘要
Qt是Trolltech公司的一个产品。Trolltech是挪威的一家软件公司,主要开发两种产品:一种是跨平台应用程序界面
框架:另外一种就是供应应做嵌入式Linux开发的应用程序平台,能够应用到PDA和各种移动设备上.Qt和Qtopia分别
是其中具有代表性的两个。(2023-05-0510:52:14)
Bylanfz出处:://tech.ccidnet/pub/article/c310_a71173_pl.html
作者:胡利民本文选自:开放系统世界
Qt是Trolltech公司的一个产品。Trolltech是挪威的一家软件公司,主要开发两种产品:一种是跨平台应用程序界面
框架:另外一种就是供应应做嵌入式Linux开发的应用程序平台,能够应用到PDA和各种移动设备上。Qt和Qtopia分别
是其中具有代表性的两个。
Qt是一个多平台的C++图形用户界面应用程序框架,它能给用户供应精致的图形用户界面所须要的全部元素,而且它是基
于一种面对对象的思想,所以用户对其对象的扩展是相当简洁的,并且它还支持真正的组件编程。
Qt是Linux桌面环境KDE的基础。笔者认为,可以说Qt与Windows下的Mfc的实质是一样的,所以Qt最大的优点在
于其跨平台性,可以支持现有的多种操作系统平台,主要有:
♦MS/V/indows95、Windows98、WindowsNT4.0、Windows2000、WindowsXP;
♦Unix/XllLinux.SunSolaris.HP-UX、CompaqTrue64Unix,IBMAIX.SGIIRIX和很多其它Xll平台:
♦Macintosh!MacOSX;
♦Embedded带FramBufferLinux平台。
下面简洁介绍一下Qt/Embedded和Qtopia在Linux上的安装和运用,还有在开发过程中可能遇到的一些问题。
Qt和Qtopia的安装
假如须要安装一个带FramBu"er的Qtopia平台,须要有以下软件(所列举软件以笃者运用的为例):
♦:
♦Tmake1.11;
♦(Qtopia1.6.0是基于该开发平台上开发的):
♦Qt/Embedded2.3.2forXI1;
♦Qt3.1.2forXII。
在Troiltech公司的网站上可以下载该公司所供应的Qt/Embedded的免费版本。
Qtopia平台安装分为以下几个步腺:
1.解包Qtopia
在Linux吩咐模式下运行以下吩咐:
tarxfzqtopia-source-1.6.0(解包)
cdqtcpia-source-1.6.0
exportQPEDIR=$PWD(设置环境变量)
cd..
2.安装“make
在Linux吩咐模式下运行以下吩咐:
tarxfztmake-l.ll.tar.gz
exportTMAKEDIR=$PWD/tmake-l.11
exportTMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
exportPATH=$TMAKEDIR/bin:$PATH
3.安裟Qt/Embedded2.3.4
在Linux吩咐模式下运行以下吩咐:
tarxfzc|t-embedded-2.3.4-commercial.tar.gz
cdqt-2.3.4
exportQTDIR=$PWD
exportQTEDIR=$QTDIR
exportF'ATH=$QTDIR/bin:$PATH
exportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
cp$QPEDIR/src/qt/qconfig-qpe.hsrc/tools/
./configure-qconfigqpe-qvfb-depths4,8,16,32
makesub-src
cd..
也可以在configure的参数中添加一system-jpeg和gif,使Qtopia平台能支持jpeg、gif格式的图形。
4.安裟Qt/Xll2.3.2
在Linux吩咐模式下运行以下吩咐:
tarxfzc|t-xll-2.3.2-commercial.tar.gz
cdqt-2.3.2
exportQTDIR=$PWD
exportPATH=$QTDIR/bin:$PATH
exportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure-no-opengl
make
make-Ctools/qvfb
mvtools/qvfb/qvfbbin
cpbin/uic$QTEDIR/bin
cd..
依据开发者本身的开发环境,也可以在configure的参数中添加别的参数,比如-no-opengl或・no・xfs,可以键入./configure
-help来获得一些帮助信息。
5.安裟Qt/Xll3.1.2
在Linux吩咐模式下运行以下吩咐:
tarxfzc|t-xll-commercial-3.1.x.tar.gz
cdqt-xll-commercial-3.1.x
exportQTDIR=$PWD
exportQT3DIR=$QTDIR
exportF'ATH=$QTDIR/bin:$PATH
exportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure-thread
make
cd..
6.安装Qtopia
在Linux吩咐模式下运行以下吩咐:
cdqtopia-source-1.6.x
exportQTDIR=$QTEDIR
exportQPEDIR=$PWD
exportPATH=$QPEDIR/bin:$PATH
cdsrc
./configure
nidke
cd
7.安装Qtopia桌面
cdqtopia-source-1.6.x/src
exportQTDIR=$QT3DIR
./configure-qtopiadesktop
make
mvqtopiadesktop/bin/qtopiadesktop../bin
cd..
Qt和QtDesigner的运用
依据上面的步瑛安装完成了Qt/Embedded和Qtopia之后,就可以运行这些程序了。
运行QU勺虚拟仿真窗口:在Linux的图形模式下运行吩咐qvfb&:Qtopia只是一个用Qt/Embedded开发的程序,运行
Qtopia,在图形模式卜.运行吩咐:
exportQTDIR=$QTEDIR,
qpe&;
这样Qtopia的程序就运行在QVFB上,即Qt的虚拟仿真窗口。
Qt/Embedded是针对嵌入式Linux而开发的•种开发工具,Qt封装了一些常用的类,而且这些类的名字都以Q字开头命
名,如QString、QDialog等。这里主要介绍一下如何利用QtDesigner来设计组件,并生成相应的代码。
在Qt中,把组件分为复合体、原始体和配件。而在Qt中,组件是由一些抽象类、困难的组件类、管理组件几何特性的类等
组成。
Qt中有三个主要的基类:QObject,Qapplication和QWidgeto
在Qt中编程,利用Signal和Slot进行对象之间的通信是Qt的主要特征。它与Windows中的消息机制特别类似,但是
Signal和Slot机制真正实现了一种消息的封装。当对象的状态变更时,发出Signal,通知全部的Slot接受Signal,尽管
它不知道哪些函数是Slot,Slot一起先也不知道哪些Signal可以接收.Signal和Slot之间不是一一对应的关系,一个Signal
可以发给多个Slot,Slot也可以接收多个Signal。Slot除了可以接收Signal以外,与其它的成员函数没有区分。这种机
制比运用回调函数要敏捷,但是会减慢程序的运行速度。不过在现在高速CPU的面前,这种损失是无足轻重的,而且它还能
保证程序的简明性和敏捷性,特别便利。
在Qt的组件中,不仅定义了常用的成员变量和成员函数,还定义了全部与该组件相关的Signal和Slot。
要将组件组合起来,最简洁的方法就是运用QtDesigner。首先要启动QtDesigner,在Linux吩咐模式下,键入以下吩咐
(假设Qt安装在/usr/local下):
cdqt-2.3.2/bin
./designer
这样就可以启动一个与Windows下的Delphi相类似的如图1的界面。
然后新建个QFrame,将自己须要的组件干肮拖拉到这个Frame中,信任很多人都有过这样的经验,此处就不再具体描
述了。完成之后存盘时,会将这个新的组件保存为一个扩展名为.5的文件。假设所存的文件名为test.ui,用vitest.ui来
查看这个文件,发觉这是一个用xml语言写的一个文本。下面用这个test.ui生成相应的test.h和test.cpp。同样还是在
这个书目下,可以看到一个uic的工具,这个是Qt特地用来将ui文件生成.h和.cpp文件的,在终端模式卜.键入以卜吩咐:
./uic-otest.htest.ui
./uic-otest.h-itest.cpptest.ui
此时就能看到生成了相应test.h和test.cpp,这是一个类。当然这只是一些表面的东西,还须要在这些代码中添加相应的
Signal和Slot,完成所须要的操作。值得留意的是,相应版本生成的ui最好用相应版本的uic来生成代码。假如用Qt3.1.2
的Designer生成的ui,用Qt2.3.2的uic来生成代码,生成的代码都会是一些空函数。
在一般的开发过程中,首先通过这个ui生成的一个类,在Qt中通常叫做Base,如上面的例子,叫做testBase:然后再新
建一个类,来继承这个Base。通常叫做实现类[mpl,如testlmpL在这个实现类里面定义所须要的成员函数、Signal和
Slot,因为ui可能是常常须要改动的。假如这样做,每次只须要在Designer中修改ui,而不用去理睬这些成员函数、Signal
和Slot了。
编译一个Qt程序必定须要Makefile,在Qt中供应了一个特地生成Makefile的工具,就是tmake。用tmake须要依据编
写的程序写一个.pro文件。.pro文件特别简洁,有固定的格式,下面是一个例子:
TEMPLATE=app
CONFIG=qtopiawarn_onrelease
M0C_DIR=tmp
OBJECTS_DIR=tmp
HEADERS=fcrs.h\
structs.h\
globalfunc.h\
globalvers.h\
testimpl.h
SOURCES=main.cpp\
globalfunc.cpp\
globalvers.cpp\
testimpl.cpp
INTERFACES=test.ui\
TARGET=fcrs
生成这个.pro文件之后,在终端中键入下面的啖咐:
tmake-oMakefile
就自动生成了一个Makefile,运用这个Makefie编译所编写的程序就可以九
Qt/Embedded开发环境建立的过程
Qt/Embedded开发环境建立的过程:
(这些软件可以免费从trolltech的WEB或FTP服务器上下载)
♦tmake1.11或更高版本:(生成Qt/Embedded应用工程的Makefile文件)
♦Qt/Embedded2.3.7(Qt/Embedded安装包)
♦Qt2.3.2forXII;(Qt的XII版的安装包,它将产生xll开发环境所须要的两个工具)
1、安装tmake
在Linux吩咐模式下运行以下吩咐:
tarxfztmake-l.ll.tar.gz
exportTMAKEDIR=$PWD/tmake-l.11
exportTMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
exportPATH=$TMAKEDIR/bin:$PATH
2.安装Qt/Embedded2.3.7
在Linux吩咐模式下运行以下吩咐:
tarxfzC|t-embedded-2.3.7.tar.gz
cdqt-2.3.7
exportQTDIR=$PWD
exportQTEDIR=$QTDIR
exportF'ATH=$QTDIR/bin:$PATH
exportL.D_LIBRARY_PATH=$QTDIR/lib:$LD_LIBF<ARY_PATH
./configure-qconfig-qvfb-depths4,8,16,32
makesub-src
cd..
上述吩咐./configure-qconfig-qvfb-depths4,8,16,32指定Qt嵌入式开发包生
成虚拟缓冲帧工具qvfb,并支持4,8,16,32位的显示颜色深度。另外我们也可以在
configure的参数中添加一system-jpeg和gif,使Qt/Embedded平台能支持jpeg、gif
格式的图形。
上述吩咐makesub-src指定按精简方式编译开发包,也就是说有些Qt类未被编
译。Qt嵌入式开发包有5种编译范围的选项,运用这些选项,可限制Qt生成的库文件的大
小,但是您的应用所运用到的一些Qt类将可能因此在Qt的库中找不到链接。编译选项的具
体用法可运行./configure-help吩咐查看。
3.安装Qt/Xll2.3.2
在Linux吩咐模式下运行以下吩咐:
tarxfzqt-xll-2.3.2.tar.gz
cdqt-2.3.2
exportQTDIR=$PWD
exportPATH=$QTDIR/bin:$PATH
exportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure-no-opengl
make
make-Ctools/qvfb
mvtools/qvfb/qvfbbin
cpbin/uic$QTEDIR/bin
cd..
依据开发者本身的开发环境,也可以在configu・e的参数中添加别的参数,比如
-no-opengl或・no-xfs,可以键入./configure-help来获得一些都助信息。
假如Qt/Embedded的应用是在UNIX平台下开发的话,那么它就可以在开发的机器
上以一个独立的限制台或者虚拟缓冲帧的方式来运行,对于后者来说,其实是有一个XII
的应用程序虚拟了一个缓冲帧。通过指定显示设备的宽度,高度和颜色深度,虚拟出来
的缓冲帧将和物理的显示设备在每个像素,保持一样。这样每次调试应用时开发人员就
不用总是刷新嵌入式设备的FLASH存储空间,从而加速了应用的编译、链接和运行周期。
运行Qt的虚拟缓冲帧工具的方法是:在Linux的图形模式卜.运行吩咐:
qvfb(回车)
当Qt嵌入式的应用程序要把显示结果输出到虚拟缓冲帧时,我们在吩咐行运行这
个程序时,在程序名后加上・qws的选项。例如:$>hello-qws
一,QT/E的安装。
在本机中安装了包括QT4.0.1(WINDOWS版本)以及QT/E2。3。7(LINUX版本)。
QT/E式安装在我的虚拟机中。因为QT/E2.3.7的版本问题,其相宜在REDHAT9。。版本(或更低版本)下安装,否则安
装不胜利。
QT/E安装过程困难,具体细微环节可以参考下面这篇文章。《Qt/Embedded开发环境建立的过程》
此文在网上可搜寻到。
本机下虚拟机中QT/E安装路径为:/home/wangxl/QTE/qt-2.3.7
QT/X11安装路径为:/home/wangxl/QTE/q,2.3.2
Tmake安装路径为:/home/wangxl/QTE/Tmake-1.8
QT/E下或地址为:ftp://ftp.rediris.es/mirror/Qt/source/
Tmake下载地址为:ftp://ftp.trolltech/freebies/tmake/
二.QT与QT/E以及QT3与QT4之间的区分
相对来说QT与QT/E的语法一样,所不同之处在库类大小或者库类函数大小不同而已。QT/E相对于QT来说,不具有少数
类或者少数函数的支持。具体QT/E是否包含某个类或者包含某个类中的函数,我的方法是在QT/E安装书目下的include
文件夹中去查找。
QT3和QT4有很多不同点,主要不同也是在于库类以及支持函数有所变更,比如,有些QT3中的函数,在QT4中被其他
函数名所代替,因此很多QT4程序在QT3环境下无法执行。QT/E2.3.7与QT3基本相同,除了我前面提到的QT与QT/E
的差别。
三.QT/E编译与执行。
1.在QT/E编译与执行前要先设置TMAKE与QT/ELIB环境,具体方法如下:
[root@localhosttmake-1.8]#exportTMA<EDIR=$PWD
[root@localhosttmake-1.8]#exportTMA<EPATH=$TMAKEDIR/lib/qws/linux-x86-g++
[root@localhosttmake-1.8]#exportPATH=$TMAKEDIR/bin:$PATH
[root@localhostqt-2.3.7]#exportQTDIR=$PWD
[root@localhostqt-2.3.7]#exportQTEDIR=$QTDIR
[root@localhostqt-2.3.7]#exportPATH=SQTDIR/bin:$PATH
[root@localhostqt-2.3.7]#exportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
2.假如你是用DESIGNER工具设计的界面(后面有讲),则要将*.ui文件转换成*.h文件和*.cpp文件。转换方法如下:
uic-otest.htest.ui
uic-otest.cpp-itest.htest.ui
3.编写一个十.p「o文件(用来生成Makefile文件用),该文件格式比较固定。
如文件基本格式如下(以test.cpp,test.hmain.cpp为例子):
EMPLATE=app
CONFIG+=qtwarn_onrelease
HEADERS=test.h
SOURCES=test.cpp\
main.cpp
TARGET=hello
DEPENDPATH=/home/wangxl/QTE/qt-2.3.7/include
REQUIRES=
4.生成Makefile文件
方法为:tmake-oMakefile
5编译生成可执行文件
make
6打开CVFB
进入安装QT/X11所在书目,在BIN书目下执行程序qvfb。
有时候须要修改qvfb执行时的deptb参数才能够执行QT/E程序。可以干脆在QVFB打开窗口的Configure彩单项中选择,
也可以用如下吩咐执行QVFBo
./qvfb-width**-height**-depth**
7.执行QT/E程序
如□/TEST
在QVFB程序打开的窗口中将出现TEST程序的显示.
四.Qt/e与QT/X11
安装QT/E的同时还须要安装QT/X11与Tmake,Tmake是用来帮助生成Makefile文件的。安装QT/X11主要是向QT/E
供应designer工具和qvfb工具的。
Designer可以用来设计图形界面,最终生成.ui文件,可通过UIC吩咐转换为相应的C++文件。
QVFB模拟帧缓冲,供应QT/E程序的显示平台。
五.QT/I=程序ARM板上执行
在我虚拟机上可以执行的QT/E程序不能在ARM板上执行,须要对QT/E进行重新编译,并须要设置响对于ARM板系统的
编译环境,具体方法可以参考我另外的一文《QT/E开发记录》
六.QT/E支持中文显示问题
QT/E须要字体转换才能显示中文。具体方法可以参考我另外的■文《QT/E开发记录》
但是由于缺少UNICODE的QPF文件的字体,中文字大小不匀称问题尚没解决。
七QT/E的一些参考资料:
QT中文论坛
(关于QT3的类,以及类函数可以在这找寻)
供应QT3编程最好书籍的电子版本《C++GUIProgrammingwithQT3》(本机)
关于QT4可以参考QTASSISTNAT(本机中),另外QTASSISTNAT中也可以查找QT3的类及库等。
设置Qtopia的build环境
1、环境变量
在目标系统上buildQtopia必需设定必要的环境变量,如QTDIR,假如依靠多个版本的Qt,则须要用环境变量指向用到
的库配置。
一种方法是将环境变量的设定写入文件,通过运行source吩咐应用文件的内容。
举例说明:
Linux/bash下建立环境变量设定文件qtopia.sh,内容如下:
exportQPEDIR=/opt/Qtopia
exportQTDIR=/opt/Qtopia
exportPATH=$QTDIR/bin:$PATH
exportTMAKEPATH=/opt/Qtopia/tmake/lib/qws/linux-generic-g++
exportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
须要时运行sourceqtopia.sh即可应用以上环境变量。
另外也可以通过在.bash"文件中设定别名来应用这些环境变量。假设环境变量设置文件存放在home书目的bin下,则
可在.bashrc中加入:
aliasqtc»pia='source~/bin/qtopia.sh'
2、创建自定义的配置文件
整个Qtopia系统在build过程中须要三个独立的配置系统:
1)Qt/Ernbedded配置文件
2)tmake-用于buildQtopia1.x和一些第三方软件
3)qmake-用于buildQtopia2及以上版本
在buildQtopia以前,先要完成以上三项的配置。
下面是创建一个''myarm”配置的例子:
cp-rSTMAKEDIR/lib/qws/linux-arm-g++$TMAKEDIR/lib/qws/linux-myarm-g++
cp-rSQTEDIR/configs/linux-arm-g++-shared$QTEDIR/configs/linux-myarm-g++-shared
cp-rsQPEDIR/mkspecs/qws/linux-arm-g4-+$QPEDIR/mkspecs/qws/linux-myarm-g++
Qt/Embedded
编辑$QTEDIR/configs/linux-myarm-g++-shared,修改其中的utilities和flags成适合系统的内容,如:
可能须要修改SYSCONF_CXX,SYSCONF_CC和SYSCONF_UNK,指定正确的编译器.可能须要增加编译选项
-DMYARM,在代码中增加宏#1£<^MYARM(用以增加设备相关的代码)
tmake
编辑$TMAKEDIR/lib/qws/linux-myarm-g++/tmake.conf,修改用到的utilites和flags:
可能须要修改TMAKE_CC,TMAKE_CXX和TMAKEJJNK
可能须要增加-DMYARM选项
qnidke
修改$QPEDIR/mkspecs/qws/linux-myarm-g++/qmake.conf:
QMAKE-CC,QMAKE_CXX和QMAKE_LINK
-DMYARM
留意:qrnake.conf的最终一行必需是:
exists($$(QPEDIR)/src/config.pri):include($$(QPEDIR)/src/config.pri)
可用于书目名的字符
正则表达式字符
Qtopia1.9.x和Qtopia2.0.02.1.0对字符有以下的耍求;
Qtopiabuild系统访问到的任何书目都不能包含正则表达式字符
任何能被QRegExp识别的特殊字符和字符序列都可能引起问题
字符只匹配自身
不要将正则表达式字符用于书目名,包括(但不仅限于):+.?*\()口人${}
注:Qtopia2.1.0和2.1.1及以上版本可以通过应用patch解除以上的限制
空格
Qtopiabuild系统不支持书目名中包含空格。
必需保证:
build系统访问到的书目不包含空格
访问书目的各层上级书目也不包含空格
Qtopia的依靠和必要条件
简介
为了使Qtopia正确运行,必需满意以下的必要条件:
安装适当的编译/交叉编译工具
Qt/Embedded-2.3.11
Linuxkernel供应共享内存、mmap和socket支持
Linux支持framebuffer
Linux支持OSS声音或支持与OSS兼容的ALSA声音。进一步的信息参考TheQtopaA/V&AppearanceFAQ
还须要以下的库:
Video4Linux
zlib
libuuid(akdluuid)
libjpeg
xorg或Xll
注:Freetype不是必需的但建议支持
支持的编译器和交叉编译器
gcc-2.95.2
gcc3.2.4
gcc-3.3.0,gcc-3.3.3,gcc-3.3.4
gcc-3.4.1
声音
Qtopia须要/dev/dsp可写,并支持以下的ioctl操作:
SNDCTL_DSP_SETFRAGMENT-Qtopia将这个值设置为0x4000c.
SNDCTL_DSP_SETFM-Qtopia设置为AFMT_S16_LE
SNDCTL_DSP_STEREO-Qtopia设置为1/true.
SNDCTL_DSP_SPEED-Qtopia设置为44100.
SNDCTL_DSP_GETOSPACE
Qtopia还须要/dev/dsp可以以堵塞方式和非堵塞方式打开。以上的设定是Qtopia须要的设定,但可以容许少许的偏差,
但假如不设定成Qtopia须要的值则不能保证音频能平滑播放。假如您的设备只支持22500的播放速率,则在调用
SNDCTL_DSP_SPEED时要报告此速率,以免造成音频质量的缺损。不过,假如系统不支持GETOSPACE,非堵塞写入
或SNDCTL_DSP_SET_FRAGMENT,几乎可以确定必定会损失音频质量。
Video4Linux
Camera应用程序须要支持Video4Linuxvl的内核,Qtopia没有供应当支持。
请参考正式的VideoforLinux资源站点,参看API的具体内容。
zlib
zlib可以从下载
libuuid(akaluuid)
Qtopia不供应uuid支持。这个库可以从站点下载
另外,假如你有SuSELinux的发行版,e2fsprogs-devel这个包可以供应uuid支持;在Debian中对应的包是uuid-dev.
这个库应当放在标准路经下/usr/lib/libuuid.so
请用包管理工具来查看该包是否已经安装:
rpm-qa|grepe2fsprogs
假如尚未安装,请从安装盘或镜像站安装这个包。
须要留意的是,假如没有安装e2fsprogs-devel,在链接时会发生下面的错误:
/usr/lib/gcc-lib/i586-suse-Linux/3.3.3/../../../../i586-suse-linux/bin/ld:
cannotfind-luuid
假如安装了该库仍遇到上述错误,则检杳Qtopia的configure脚本的-L和-R参数,以确定脚本包含了库的实际路径。关
于交叉编译的信息可参考SystemIntegrator'sGuide.
libjpeg
Qtopia不供应jpeg库。Qtopia须要Qt/Embedded配置为支持jpeg.
libjpeg库可从下载
此外,假如你有SuSE发行版,libjpeg这个包可供应当库。这个库应当安装在标准路经/usr/lib/libjpeg.so
检查libjpeg包是否己经安装:
rpm-qa|greplibjpeg
假如未安装,请从安装盘或镜像站安装。
关于libjpeg交叉编译的信息,可参考SystemIntegrator'sGuide.
xorg或Xll
开发包括有从以下站点下载:
相关探讨
确定起先Qtopia须要的步骤,参考:Gettingstarted
将Qtopia集成到特定设备上的重点步骤,参考:SystemIntegrator'sguide
Qtopia的FAQs,参看:Qtopiaindexpage
系统是完全安装RedHat9.0(里面带QT3.1).板子是X-Hyper250B的,Toolchain用的是开发板带的
hybus-arm-linux-Rl.l
交叉编译所用到的文件:
qt-embedded-2.3.10-free.tar.gz
qt-xll-2.3.2.tar.gz
qtopia-f"ee-source-2.1.1.tar.gz
tmake-l.13.tar.gz
e2fsprogs-1.35.tar.gz
主机x86的编译步骤:
tarxfzqt-embedded-2.3.10-free.tar.gz(解压后qt-2.3.10改名为qt-2.3.10・host)
exportQTEDIR=$PWD/qt-2.3.10-host
tarxfzqt-xll-2.3.2.tar.gz(解压后qt-2.3.2)
exportQT2DIR=$PWD/qt-2.3.2
tarxfzqtopia-free-source-2.1.1.tar.gz(解压后qtopia-free-2.1.1改名为qtopia-2.1.1-host)
exportQPEDIR=$PWD/qtopia-2.1.1-host
tarxfztmake-1.13.tar.gz(解压后tmake-1.13)
exportTMAKEDIR=$PWD/tmake-1.13
exportTMAKEPATH=$PWD/tmake-1.13/lib/qws/linux-x86-g++
exportPATH=$TMAKEDIR/bin:$PATH
cdqt-2.3.2
exportQTDIR=$QT2DIR
exportPATH=$QTDIR/bin:$PATH
exportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure-no-xft
make
make-Ctools/qvfb
cd..
cdqt-2.3.10-host
exportQTDIR=$PWD
exportF'ATH=$QTDIR/bin:$PATH
exportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
mkdirbin(因为解压后的qt-2.3.10没有bin文件夹)
cp$QT2DIR/biri/uicbin
cp$QT2DIR/tools/qvfb/qvfbbin
cp$QPEDIR/src/qt/qconfig-qpe.hsrc/tools/
./configure-qconfigqpe-qvfb-thread-system-jpeg-gif-depths4,8,16,32
make
cd..
tarxzfe2fsprogs-l.35.tar.gz
cde2fsprogs-1.35
./configure-enable-elf-shlibs
makeinstalllib/uuid/
注:这是编译x86的libuuid库
cd..
cdqtcpia-2.1.1-host
exportPATH=$QPEDIR/bin:$PATH
exportLD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH
./configure
make
编译例子:
$qmake-project==>>我都是这样创建.pro文件的
$tmake-oMakefile
$make
$qvfb&
$./hello-qws或者$qpe
还没怎么细致探讨过。
目标机a「m-linux的编译步骤:
tarxfzqt-embedded-2.3.10-rree.tar.gz(解压后qt-2.3.10改名为qt-2.3.10-target)
exportQTEDIR=$PWD/qt-2.3.10-target
tarxfzqt-xll-2.3.2.tar.gz
exportQT2DIR=$PWD/qt-2.3.2
tarxfzqtx)pia-free-source-2.1.1.tar.gz(解压后qtopia-free-2.1.1改名为qtopia-2.1.1-target)
exportQPEDIR=$PWD/qtopia-2.1.1-target
tarxfztmake-1.13.tar.gz
exportTMAKEDIR=$PWD/tmake-1.13
exportTMAKEPATH=$PWD/tmake-1.13/lib/qws/linux-arm-g++
exportPATH=$TMAKEDIR/bin:$PATH
cdqt-2.3.2
exportQTDIR=$QT2DIR
exportPATH=$QTDIR/bin:$PATH
exportL.D_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure-no-xft
make
make-Ctools/qvfb
cd..
cdqt-2.3.10-target
exportQTDIR=$PWD
exportPATH=$QTDIR/bin:$PATH
exportLD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
mkdirbin
cp$QT2DIR/bin/uicbin
cp$QT2DIR/tools/qvfb/qvfbbin
cp$QPEDIR/src/qt/qconfig-qpe.hsrc/tools/
./configure-xplatformlinux-arm-g++-qconfigqpe-qvfb-thread-system-jpeg-gif-depths4,8,16,32
make
cd..
注:这里须要arm版本的libjpeg.so.62,hybus-arm-linux-Rl.l里面包含这个库:如没有可以上网下载。
tarxzfe2fsprogs-1.35.tar.gz
cde2fsprogs-1.35
./configure-host=arm-linux-with-cc=arm-linux-gcc-with-linker=arm-linux-ld-enable-elf-shlibs
-prefix=/usr/local/hybus-arm-linux-Rl.l/arm-linux
makeinstalllib/uuid/===>>>这步安装至ijhybus-arm-linux-Rl.l/lib上的libuuid.so.1.2版本不对,
要cplib/libuuid.so.1.2../hybus-arm-linux-Rl.l/lib
注:这步是交叉编译arm的libuuid库,配置详情见./configure--help
(还要多谢这里面的大哥呀,好不简洁才在网上找到的)
cd..
cdqtopia-2.1.1-host
exportF'ATH=$QPEDIR/bin:$PATH
exportLD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH
cpsrc/libraries/qtopia/custom-linux-ipaq-g++.cppsrc/libraries/qtopia/custom-linux-arm-g++.cpp
cpsrc/libraries/qtopia/custom-linux-ipaq-g++.hsrc/libraries/qtopia/custom-lnux-arm-g++.h
./configure-xplatformlinux-arm-g++
make
注:这里须要libstdc++.so和libgcjs.so库
develop环境下qt中文化程序设计
原文出处:Linux公社
原文作者:yfyOOl
kdevelop是一款在linux平台下可以同windows环境下的vc相媲美的集成开发环境,qt则是一款支持包括windows和
linux平台
的GUI库,可以说它是linux下的MFC.在显示上,qt运用Unicode作为内部编码,可以支持多种编码,如何运用qt进行国际
化编程
在网上可以找到很多资料的,但都是针对较早版本的qt进行介绍的.qt3.0.5中对这些作了些改动,这些方法就相应的要做些改
动.
而且在kdevelop中开发qt应用程序,将会事半功倍,我的开发环境为redhat8.0(需安装kde开发工具包).
首先在linux中打开kdevelop集成开发环境,用它的应用程序向导新建•个qt的SDI的应用程序框架.这个同windows下
vc很类似.它
将会为你自动生成版本号,作者,e-mail等信息的单文档对话框的应用程序框架.我们首先对它自动生成的程序进行汉化(qtl
是
我的项目名称).
1.汉化自动生成的程序
添加翻译文件
在“项目”菜单中选择“添加新的翻译文件”,语言选择"zh_CN.Gb2312”.将会创建个zh_CN.GB2312字符编码的翻译文
件.扩展名
为".ts".在qt3.0.5环境下,打开"*.ts”翻译文件的工具是linguist.你可以在“工具“菜单中选择"QT
linguist”来打开,在linguist菜单中选择"file"->"open”打开所要翻译的翻译文件.此时可以在linguist窗口中的source
text中
的文木就是你所要翻译的文本,选择所要翻译的文本,在下方有一个类似一页纸一样的地方,在translate下输入翻译后的文本.
所示.
翻译完这些文件后,编译运行,在我们的程序里并不能显示中文,还是英文,我们还须要做的就是用Irelease吩咐将翻译后的文
件转换
成文件才可以运用.在限制台下进入你用kdevelop所生成的应用程序书目.
>lreleaseMakefile.am
qt3.0.5用这个两个程序取代了以前版本的findtr和msg2qm吩咐.在kdevelop集成环境中打开main.cpp主函数,
QApplicationa(argczargv);
,,
a.setFont(QFont(helvetica"/10));
QTranslatortor(0);
tor.load;QString("qtl.")+QTextCodec::locale()z);
11tor.load(QString("qtl.zh_CN.GB2312"),);
a.installTranslator(&tor);
/*uncommentthefollowingline,ifyouwantaWindows95
look*/
//a.setStyle(WindowsStyIe);
QtlApp*qtl=newQtlApp();
//Forml*qtl=newForml();
a.setManWidget(qtl);
此处:
tor.load;QString("qtl.")+QTextCodec:JocaleO,);
是依据客户环境的来载入当前书目下相应的翻译文件的中文环境默认的为
locale.redhatlocalegbl8030z
此处要么把翻译文件名由qtl.zh_CN.GB2312.qm改为qtl.zh_CN.GB18030.qm,要么将这句改为
tor.load;QString("qtl.zh_CN.GB2312"),1'Z);
不过为了国际化编程的须要,建议采纳第一种方法,更改后编译运行,你会发觉你的程序已经是中文界面的了.
2.汉化自己的对话框
大多数状况下我们都须要自己来设计对话框,qt为我们供应了特别好的对话框编辑器QtDesigner,可以很便利的设计我们的
对话框,qt
的信号和槽等,关于QtDesigner的运用,限于篇幅,不再赘述.以前面的程序为基础.在kdevelop中选择"文件新建",选择
Qt
Designer文件(*.ui).在文件名一栏中填写"mydialog",最终点击确定按钮,即会启动QtDesigner,此处只拖了一个Label,
写了一
些英文字符,对话框的name属性为Forml.将对话框mydialog.ui保存.
在限制台下进入你用kdevelop所生成的应用程序书目.
>lupdateMakefile.am
同样用"QT
linguist"来翻译qtl.zh_CN.GB2312.tr文件.比时linguist的context中会多出Forml的选项,这里面就是我们新建的对
话框要翻译的
选项.依据前面的方法进行汉化.
>lreleaseMakefile.am
生成qtl.zh_CN.GB2312.qm文件.
编译将会生成mydialog.cppmydialog.hmydialog.moc文件.然后将main.cpp中的
QtlApp*qtl=newQtlApp。;改为
Forml*qtl=newForml();
并将"mydialog.h"#include
进去.依据前面的方法更改tor.load中加载的翻译文件.编译运行,你的对话框也是中文的了.
3.其它的一些说明
由于qt返回的是Unicode编码,譬如你在LineEdit中干脆输入中文,返回的就是??,qt中可以干脆运用QTextCodec来转换
字符串的编码.
QStringstring;
string=LineEditl->text();〃取得LineEditl返回的文字
QTextCodec*codec=QTextCodec::codecForName("GBK");
〃转换编码
QCString
chinese__string=codec->fromUnicode(string);//niQCString来存储返回的多字节编码
当然,你在头文件中就必需加入
#incltde<qtextcodec.h>
#inclLde<qstring.h>
#inc几de<qcstring.h>
4.QTextStream对中文的支持
QTextCodec*codec=QTextCodec::codecForName("GBK");/*当前编码为"GBK"*/
QTextStreammystream(&file);
fiiyblredm.bt:LCudec(cudec);
5.QCSt-ing&QString
QCString中不以unicode编码
QString以unicode为编码.
qt内部运用unicode为编码,所以假如要在qt的部件如multilineedit中显示中文,则须要将非unicode的字符转换成
unicode字符.
QCStringlocallyEncoded="中国人不是东亚病夫";〃texttoconvert
QTextCodec*codec=QTextCodec::codecForName("GBK");//getthecodecforGBK
QStringunicodeString=codec->toUnicode(locallyEncoded);
Qt国际化编程
内容:
1.Qt的文本显示
2.Qt的文本输入
3.Qt的打印
对本文的评价
订阅:
developerWorks时事通讯
于明俭
2023年1月09日
本篇探讨Qt库对国际化的支持,将介绍Qt对文本显示,输入和打印的支持,和如何之用Qt开发国际化的软件。
Qt目前的版本(2.2.4)对国际化的支持已经相当完善。在文本显示_L,Qt运用了Unicode作为内部编码,可以同时支持
多种编码。为Qt增加一种编码的支持也比较便利,只要增加该编码和Unicode的转换编码便可以了。Qt目前支持ISO
标准编码ISO8859-1,ISO8859-2,ISO8859-3,ISO8859-4,ISO8859-5,ISO8859-7,ISO8859-9,和ISO
8859-15(对于阿拉伯语和希伯来语的支持正在开发之中),中文GBK/Big5,日文eucJP/JIS/ShiftJIS,韩文eucKR,俄
文K018-Ro当然也可以干脆运用UTF8编码。
Qt运用了自己定义的Locale机制,在编码支持和信息文件(MessageFile)的翻译上弥补了目前Unix上所普遍采纳Locale
和gettext的不足之处。Qt的这种机制可以使Qt的同一组件(QWidget)上同时显示不同编码的文本。比如,Qt的标
签上可以同时运用中文简体和中文繁体文本。
在文本输入上,Qt采纳了XIM(XInputMethod)标准协议,可以干脆运用XIM输入服务器。由于目前的绝大多数输入服
务器都是针对单一语言的,所以在Qt的标准输入组件(QLineEdit,QMultiLineEdit)中的输入受到单一编码的限制,Qt还
不支持动态切换编码输入的支持,这是它的不足之处。
1.Qt的文本显示
像般的国际化过程一样,Qt运用了类似GNUgettext-样的函数QObject::tr(),它用于从Qt的信息文件.qm中
取出信息,这些信息是经过Qt的工具处理的。Qt在处理编码时还运用了QTranslator类,可用于指定整个应用软件的
的信息文件。
运用Qt编写国际化的程序,最好不要在程序中干脆运用特殊编码的文本。比如要编写一中文界面的Qt程序,应当在程
序中运用英文,程序编写完成后,把文本提取出来翻译。这样,程序还可以依据Locale的不同,支持多种语言。下面介
绍如何在Qt程序中标注字符串,如何提取并翻译文本。
下面是•段运用了QObject::"。的代码,它建立了一个弹出菜单,菜单项是"Quit",它被放置在菜单条上,在菜单条上
显示的是标签"File"。
QPopupMenu*popup;
popup=:newQPopupMenu(this);
popup->insertltem(tr("&Quit"),qApp.SLOT(quit()));
menubar->lnsertitem(tr("&Flle"),popup);
对于绝大多数状况,可以用上述方法处理。不过有时在定义某些变量中运用的字符串,不能运用上述方法,但是为了让Qt
提取并翻译该字符串,必需用某种方法标记出来。Qt定义了QT_TR_NOOP()和QT_TRANSLATE_NOOP()来标记它
们。前者用于单个字符串,后者用于多个字符串。比如,
staticconstchar*strings[]={
QT_TR_NOOP("Hello"),
QT_TR_NOOP("World")
};
有时须要运用printf/sprintf之类的函数动态生成字符串,比如,
QStingss;
s.sprintf("Button%d",i);
but->setText(s);
对这种运用方式的国际化是运用arg()函数。
QStrings=tr("Button%1").arg(i);
but->setText(s);
提取上述信息的方法是运用Qt供应的工具findtr吩咐:
findtr[filename].cpp>il8n.po
它类似于GNU的xgettext,上述文件的提取信息文件内包含,
"Content-Type:text/plain;charset=iso-8859-l\n"
#:il8n.cpp:34
msgid"lExampleWidget::&File"
msgstr,,w
接下来是文本翻译过程。在Qt中翻译信息文件时应当留意以下事项:(1)提取的信息文件的编码是iso-8859-l,在翻译
成某种语言(编码)时应当留意改动它的字符集,比如对中文GB2312和Big5编码,应当是,"Content-Type:text/plain;
charset==gb2312\n"^ifi"Content-Type;text/plain;charset=big5\n"^(2)提取的信息有一,个范围,比如_L面的文
件指定的范围是ExampleWidget,在翻译前应当把它去掉,变成msgid"::&File"o(3)被翻译的字符串可能含有加速
键符号,如"&File“中的“F",假如翻译成中文最好保留该信息,它可以翻译成"文件(&F),
对于翻译后的文件(比如上面的翻译文件存为il3n_gb.po),必需运用Qt供应的工具msg2qm把它转换为,qm文件
才能运用,
>msg2qmil8n_gb.poil8n_gb.qm
它类似于GNU的msgfmt吩咐。翻译后的文件可以用Qt程序干脆调用。
QTranslator*translator=newQTranslatcr(O);
translator->load("il8n_gb.qmH,
qApp->instal!Translator(translator);
此外,Qt还供应了类似于msgmerge的工具mergetr,它用于把新提取的信息文件和已经翻译过的信息文件融合起来,
在此不再赘述。
在Qt中也可以干脆运用QTextCodec来转换字符串的编码,这为在Qt下开发纯中文软件带来了便利条件,不过这种方
法不符和国际化/本地化的习惯,
char*string="中文和English混和字符串!”
QTextCodec*gbk_codec=QTextCodec::codecByName("GBK");
QStringgbk_string=codec->toUnicode(string);
QLabel:klabel=newQLabel(gbk_string);
假如使程序只支持一种编码,也可以干脆把整个应用程序的编码设置为GBK编码,然后在字符串之前加tr(QObject::tr),
qApp->setDefaultCodec(QTextCodec::codecForName("GBK"));
QLabel*label=newQLabel(。("中文标签"));
假如使Qt依据Locale的环境变量取得字符集,可以运用QString::fromLocal8Bit(str)<.
本节的例子请参见qt-il8n-example.tar.gz
2.Qt的文本输入
在输入方面,Qt的输入条(QLineEdit)和编辑区(QMultiLineEdit)都支持XIM,只要协作相应的输入服务器,便可以输入
中文/日文/韩文。目前有很多支持XIM的软件,比如中文:Chinput/xcin/rfinput/q9,日文:kinput2/skkinput,韩文:
ami/hanIMo
Qt程序的缺省输入风格是Ove仃heSpo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年产xx电缆工业品辐射加工项目建议书
- 年产xxx直驱风力发电机项目建议书
- 年产xx洁牙机项目建议书
- 高中地理高考一轮复习 植被
- 糖尿病1型和2型鉴别
- 高考地理一轮复习+课件+4.6常见地貌类型-海岸地貌和冰川地貌
- 幼教女性培训专题
- 大班美术教案:我给你画张像
- 二年级上册数学教案-1 认识厘米(5)-人教版
- 私募基金销售培训
- 综合评标专家库专家入库考试
- 网络管理员备考资料网络管理员
- 同意未成年出国声明 - 中英
- 人工造林项目投标方案
- 产品企业标准编写模板及使用说明
- 《临床实验室管理学》课程教学大纲
- 各基层支部三重一大决策记录表
- 风机安装规范和风机安装及验收规范
- 带状疱疹及带状疱疹后遗神经痛
- 古代汉语上册重点提要
- 生产经理的个人简历参考模板
评论
0/150
提交评论