QtEmbedded/Qtopia FAQ

上一篇 / 下一篇  2007-08-13 12:33:11 / 个人分类:嵌入式开发

Qt-X11/QtEmbedded/Qtopia及其他常见包的关系?木铎校园 BBS 社区S8J3t Gsh.cO8H c
build Qtopia时经常能看到以下的包:木铎校园 BBS 社区!r:MwZLP
qt-x11-2.3.2木铎校园 BBS 社区c,i#pr*y8@zP!r
qt-x11-3.3.x
@x0P&Z9n5A6~t0qte-2.3.x
c'kRT ev\0qtopia-2.x
d+p\ o0Ch0tmake-1.3木铎校园 BBS 社区8n ^nFF2p]o
qmake, uic, moc
,me`g&oj1hVp0...木铎校园 BBS 社区CkF6\N5y&nb z
木铎校园 BBS 社区 A)y;} gJ+a1j#|3y
其中Qtopia编译依赖Qte;
8d WA[ K7L0qt-x11-2.3只与编译一些tool有关, 如uic,moc,qvfb..Qtopia并不依赖qt-x11;
U"E t7}}s"t0qt -x11-3.3.x用来编译qtopia desktop(qtopia与桌面同步的工具)和i18n相关的lupdate、lrelease工具, 所以如果你configure qtopia的时候没有加-no-qtopiadesktop选项或者用到了-languages参数就得准备qt-x11-3.x了; 另外在phone版本中有一个modem模拟的工具叫做phonesim, 也依赖qt-x11-3.x编译,不过多数人是用不上的, 呵呵。
Id1~([lZo0
mGF R%G0tmake用于生成Makefile文件, 用在qte应用上;木铎校园 BBS 社区g8Rk*PD%t
qmake包含在qtopia里, 用于为Qtopia应用生成Makefile文件;木铎校园 BBS 社区5` R.cP g*Nm*JSG
uic, moc,qvfb,qmake,tmake和designer使用的时候要注意版本,2.x, 3.x, 4.x之间是不兼容的, 但相同主版本号之间是兼容的,所以我们在build Qtopia过程中经常从qt-x11-2.3中拷贝现成的uic和moc供qte使用。木铎校园 BBS 社区t;C0M/X7U Sv
编译过程中出现一些头文件找不到, 类未定义等等,很多时候是因为误使用了系统默认搜索路径下的uic等工具造成的。大家要注意这个问题木铎校园 BBS 社区:w L VW8x}[M
木铎校园 BBS 社区lm'a+v_SDD,q
Qtopia/QtEmbedded版本对应关系?木铎校园 BBS 社区@J8JY|tDB J YR.Q i
Qtopia1.7.0 / Qte 2.3.7木铎校园 BBS 社区t5|6r+E$C \;I
Qtopia2.1.1 / Qte 2.3.10木铎校园 BBS 社区SK sVE1P$X-T
Qtopia2.1.2 / Qte 2.3.11
6G`/q/~1b`G7}5X0Qtopia2.2.0 / Qte 2.3.12 (包含在qtopia2.2源码包中)
k,o%Y:u'r|$\%N-x+\%g-d8m0木铎校园 BBS 社区!u"NX1e db Y
Qtopia/QtEmbedded相关源码包下载地址?
t _4n2b&`F z\8d%MO0Qt/Qte:木铎校园 BBS 社区4N e+S5A^.?3E
ftp://ftp.trolltech.com/qt/source木铎校园 BBS 社区/f6x1eQ-W7B q.Q
ftp://ftp.qtopia.org.cn/mirror/ftp.trolltech.com/qt/source
;h7{D0o1hf!}0木铎校园 BBS 社区M9|8]|7SMN B:F
Qtopia(1.6-2.2):木铎校园 BBS 社区n$N7|-i M+l!m
ftp://ftp.trolltech.com/qtopia/source
.j%|{;V%S3Z j0ftp://ftp.qtopia.org.cn/mirror/ftp.trolltech.com/qtopia/source木铎校园 BBS 社区H!j-o&mi$~3| f C4U
木铎校园 BBS 社区|db5{!{
tmake:
7|_\(J;o[h0Q#s0ftp://ftp.trolltech.com/freebies/tmake
0zI+o.e7W/e:z wDu0ftp://ftp.qtopia.org.cn/mirror/ftp.trolltech.com/freebies/tmake
,["e)|Lp"^x0木铎校园 BBS 社区|(h C4e~(X_GfW
我的QtEmbedded程序中的中文字符为什么显示成方块?
$t\0o2jS_{&@0两个可能的原因:
/^ c!^*bB7w0一是qte的库未编译进对中文textcodec的支持, 解决方案:修改qconfig-qpe.h, 去掉CODEC有关的宏, 重新configure和make木铎校园 BBS 社区#n.u Ct!?J

9Ek;}8A4yN~0二 是程序中选用的字体不是中文字体(默认的字体是Helvetica,没有中文), 需要在程序中指定一个中文字体, 如qte自带的unifont(这个字体大家普遍的看法是看上去像残废), qt4版本里新加入了文泉驿的unicode字体, 可以在源码包里找到,比较漂亮, 推荐。
i?Gz"OWRyR.g0
jQ@'?9C S L0如何把QtEmbedded程序移植为Qtopia程序?木铎校园 BBS 社区7@@bD*? Eq z2GD
Qtopia里提供了简单的宏来创建主窗口、应用style等, 最主要的改变在main函数。
@+uC?1`0参考qtopia/src/applications/clock/main.cpp
+S+p#[xc$\vm0M0--------------------------------------------------木铎校园 BBS 社区.e8q6zD|g {
#include "mymainwindow.h"
nx ?qeK0#include <qtopia/qpeapplication.h>木铎校园 BBS 社区*n-]hK"L#T
QTOPIA_ADD_APPLICATION("myappname", "MyMainWindow")
WE t$q-gK1^0QTOPIA_MAIN
%bj!]'h z0---------------------------------------------------木铎校园 BBS 社区1p6Q`^C,f
这一步很简单把,cp过来改改类名和binary的名字就OK了。木铎校园 BBS 社区u:x!Eo jpa
需要注意的是你的mainwindow的构造函数要符合(QWidget*p, const char* name, int f)的形式(三个参数)木铎校园 BBS 社区Mgm,c5u[0U|

&k ^E UV?0相应的,修改pro文件。 参考qtopia/src/applications/clock/clock.pro木铎校园 BBS 社区9d:cyi.y#eV)E
其中最重要的一行是 CONFIG+= qtopiaapp
jP LB [)?3f0这样编出来是quicklaunch插件程序(applications目录下的程序默认config是quichlaunch, 别的目录不是哦~)木铎校园 BBS 社区pfn/MIp+j:\k
木铎校园 BBS 社区AHM ?cJ
要想编成独立的应用, 加上这句:CONFIG -= buildQuicklaunch
&qR*b!v ZoNY)_0木铎校园 BBS 社区 Ru%g*fZ3XQ
大功告成!
#m Z[E*y%W0木铎校园 BBS 社区o1X Sj&F
如何将自己的应用添加到qtopia桌面里?
!D3DqQG5DP1\O#S0首先把你的应用修改成qtopia应用程序(见上一个问题)。
9sY-K7Tp}0然后把你的程序cp到qtopia程序默认的搜索路径中:木铎校园 BBS 社区\]1a2]r8\
应用程序放到SRCDIR/qtopia/image/opt/Qtopia/bin下;(后面的SRCDIR/qtopia/image/opt/Qtopia简写为"...")
;Av$nw"de j(P0quicklaunch插件放到../plugins/application下。木铎校园 BBS 社区3M1t;zT0|!?7Y
木铎校园 BBS 社区p L@i&n
假设你编译得到的quicklauncher插件叫libmybin.so, 则相应的需要在../bin下建立一个链接文件: ln -s quicklauncher mybin
x3h:~"x4O;_u,tG0
f-z4fJ:q0另外,还需要创建一个desktop文件(找个现成的改改), 把这个desktop文件放到qtopia的木铎校园 BBS 社区y8URTSe7lp
../apps/Applications下。木铎校园 BBS 社区 V;THKw
木铎校园 BBS 社区Eg#u `-auOOX%j+`
desktop 文件里最重要的信息是关联的执行档名称和图标文件的名称。 执行档名称和上文中的mybin对应, 图标的话desktop文件里只写了一个文件的名字,但实际上qtopia去搜索的时候会到以执行档的名字命名的子目录去寻找该icon文件, 也就是.../pics/mybin/xxx.png。
Z0l2J:k+Y;l-j1~;H0木铎校园 BBS 社区{]0t/P7jF8m,i5@
以上环境都弄好后, 你进到Applications页面里就能看见自己的应用程序了。木铎校园 BBS 社区}vhA)x,F
木铎校园 BBS 社区,I#qgs`(m [2Kl)yK
如何设置Qtopia的字体?
({eyN)F)p"Q/ln02.x系列版本在运行时的$HOME/Settings/下有个qpe.conf文件, 其中的[Apperance]下的FontFamily字段设置字体, FontSize设置字号。木铎校园 BBS 社区/?.i pdd@

2`h n Zc1|3?~0Qtopia 和Qte程序都会在运行时的$QTDIR/lib/fonts目录里搜索字体, 所以你要用的字体也要放在这个地方。 另外还要根据需要修改该目录下的fontdir文件。这个文件是字体(FontFamily, FontSize...)与实际的字体文件的映射, 要写正确才能找到字体文件, 所以不可马虎。木铎校园 BBS 社区o3`{G%am

/m'}$dG}S8Sd0为什么QtEmbedded自带的例子无法编译通过?
1N9]/_Q\"ND:^&v0在编译例子的时候经常会出现这样的提示信息,无法编译:
/B a4Gm!Wu*F0“#make
0R8[o{ Yp0Some of the required modules (full-config) are not available.木铎校园 BBS 社区m aAxV
Skipped.”木铎校园 BBS 社区\1?vAq

*a$@/[7Q(U%MObi0这是怎么回事呢?木铎校园 BBS 社区J{2u:Z7~\3`m
我想大家应该知道qte的库可以通过修改qconfig来增删一些特性吧, 也就是说通过定义一些宏可以去掉qte库包含的class定义,以减小qte库的大小。 所以说不同的config下编译出来的qte库多数情况下是不兼容的。
$Bb o:c eOt7]0
z/RsM.D+`*x2n#]0大家可以从该例子的.pro文件中获得一些信息(比如aclock这个例子),在pro文件中往往会有这么一行:
:F"j2sNK"Op0REQUIRES+=full-config
;wi%z j0M!j0这 句话表明,这个qte应用用到的类只有在full-config才能满足。 所以如果你用的是别的config选项干脆就不让你编译。 如果你非要编译也不是不可能,把这个限制去掉重新生成Makefile就可以了,不过很可能会出现undefined reference或者找不到类之类的错误, 大家要做好心理准备......木铎校园 BBS 社区GY)B4`4k)L#n$x`)T
木铎校园 BBS 社区j6Y?$\*hgM'n%?
要想成功编译qte的例子还有个方法是用-qconfig all参数configure QtEmbedded, 这样qte库包含所有的特性, 肯定什么例子都能编过去。木铎校园 BBS 社区_3oV(o C

^2nWT.D)O9Pem0如何裁减QtEmbedded库?
/~6X d0ro|\0QtEmbedded定义了一系列的features, 用木铎校园 BBS 社区 Sx8Ny bM+FA e
#ifndef NO_XXX木铎校园 BBS 社区&Q5xA$toz2QP3NI
#endif
/oZV&l(X0的方式把特性相关的代码包围在特定的宏里,这样如果定义了某个NO_XXX的宏,就是去掉了该特性, 从而达到减少编译的代码,进而减小libqte的大小的目的。
7OG/|,PA5F'qtXH0
O/B.u0g9A1fZ0你 在configure qte的时候有一个-qconfig xxx参数, 这个xxx指定的是包含features宏的头文件, 比如qtopia里带的qconfig-qpe.h就是专门为qtopia量身定制的宏定义文件, 该文件里去掉了qtopia未用到的feature(如打印等)。如果configure时不指定-qconfig参数,则会提示你从qte预先定义好的 qconfig中选择一个,如small/large/full, 这三项对应不同的qconfig-xxx文件, 每个文件包含不同的feature定义。 具体的位置在:$QTEDIR/src/tools/qconfig-xxx.h木铎校园 BBS 社区Y,H,J'r#Ak&|1a4Z
木铎校园 BBS 社区3jY3KM/c6wf ji4f
我们要裁减qte库最好是建立一个自己的qconfig-myconfig.h文件, 把自己的程序未用到的特性对应的宏定义在这个文件里。 configure qte的时候加-qconfig myconfig选项,这样就可以使用自己的feature定义文件了。木铎校园 BBS 社区;qZdugqC
木铎校园 BBS 社区f[ GXvvIt
另外需要注意的一点是, feature之间有依赖关系,你disable某个特性很可能连带其他一些特性也被disable。 所以还要参看$QTEDIR/src/tools/qfeatures.h中对feature依赖关系的描述。木铎校园 BBS 社区E,Y:I`0Q}k Z!`

L#u8BJM)M@0feature宏对应的功能参见文档:
l;@'p[8K J0http://doc.trolltech.com/qtopia2.0/html/features.html
Cjam S-B/?#De0木铎校园 BBS 社区h6pb,r/i2Q
Good Luck!木铎校园 BBS 社区5Tg.e^F hN

*}p XcF*a h|:T0
x;NdIw.PR;s0如何改变qvfb桌面的默认颜色(绿色)?
!K.VNp$`F'cH0qte 2.x里提供的API:木铎校园 BBS 社区UY(NJRy"q'W.A^
QWSServer::setDesktopBackground(const QColor&);
9a9aPjj}ws0QWSServer::setDesktopBackground(const QImage&);木铎校园 BBS 社区1z(I)u7X7Z&?B
木铎校园 BBS 社区k7t'L6m-T&}C b
qtopia core 4里提供的API:
g PC~&@2Kc,V0QWSServer::setBackground(const QBrush&);
9O3jb`I\?"iJ0木铎校园 BBS 社区f0p@t}1U
默认的颜色在源码的qwindowsystem_qws.cpp文件, QWSServer的构造函数里赋值,也可以直接去修改源码。 木铎校园 BBS 社区)^m d:Xhj RW Ed
木铎校园 BBS 社区sV)tvOp4b7K

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1548996

"UEI,G @HU*{&k9B0
i!sD']0L{4tN0

TAG: 嵌入式开发 linux qt qtopia

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

关于作者