QtEmbedded/Qtopia FAQ

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

Qt-X11/QtEmbedded/Qtopia及其他常见包的关系?
? s J1F4w Ty D@0
build Qtopia时经常能看到以下的包:
ET2lmnO?0qt-x11-2.3.2木铎校园 BBS 社区)D$I;lweK/XH3b#L
qt-x11-3.3.x木铎校园 BBS 社区2P5Be9Cj
qte-2.3.x木铎校园 BBS 社区#_ E/B.M0c{X`
qtopia-2.x
$G.NWeHV0tmake-1.3
C0S'S+?l)b|!d,_0qmake, uic, moc木铎校园 BBS 社区!@!J!_,SF y3z
...
b,p3e u k2B0]0
&oqZ|`.v,|n%C0其中Qtopia编译依赖Qte;
R$BI_(Rs1GU0qt-x11-2.3只与编译一些tool有关, 如uic,moc,qvfb..Qtopia并不依赖qt-x11;木铎校园 BBS 社区:j@;[Y:?H
qt -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编译,不过多数人是用不上的, 呵呵。
#n~ pf7h{:f4p#m0
,MV JM+V0tmake用于生成Makefile文件, 用在qte应用上;木铎校园 BBS 社区Z/\'X&dT*DG |
qmake包含在qtopia里, 用于为Qtopia应用生成Makefile文件;
_pUIA1kW)V0p0uic, moc,qvfb,qmake,tmake和designer使用的时候要注意版本,2.x, 3.x, 4.x之间是不兼容的, 但相同主版本号之间是兼容的,所以我们在build Qtopia过程中经常从qt-x11-2.3中拷贝现成的uic和moc供qte使用。
|*gR1pn k_0编译过程中出现一些头文件找不到, 类未定义等等,很多时候是因为误使用了系统默认搜索路径下的uic等工具造成的。大家要注意这个问题
O3k8[#sZF0
e+z5U~-P|0Qtopia/QtEmbedded版本对应关系?木铎校园 BBS 社区'I0C}k0mo_
Qtopia1.7.0 / Qte 2.3.7木铎校园 BBS 社区e b&dz}M9z&VL
Qtopia2.1.1 / Qte 2.3.10
:F:s rs$p%ST0Qtopia2.1.2 / Qte 2.3.11木铎校园 BBS 社区?6ZT6^}!J"jj9B
Qtopia2.2.0 / Qte 2.3.12 (包含在qtopia2.2源码包中)木铎校园 BBS 社区u Qs#d@i1oZ1q
木铎校园 BBS 社区*]hf&bM
Qtopia/QtEmbedded相关源码包下载地址?木铎校园 BBS 社区"e"d&H^b
Qt/Qte:木铎校园 BBS 社区1Y!`a q i
ftp://ftp.trolltech.com/qt/source
fA:Ft/s5{VP0ftp://ftp.qtopia.org.cn/mirror/ftp.trolltech.com/qt/source
"Z;n_2N0U zr0木铎校园 BBS 社区8w _@(Z1|,SK#f
Qtopia(1.6-2.2):
z,Lms$E]i;Fy0ftp://ftp.trolltech.com/qtopia/source
B,Ij#@:Cv{$]0ftp://ftp.qtopia.org.cn/mirror/ftp.trolltech.com/qtopia/source木铎校园 BBS 社区.GgI!yY/O'G3a7Z

xH*mYC%e!S7Y:`;u |0tmake:
\7yh8|MB} V^0ftp://ftp.trolltech.com/freebies/tmake木铎校园 BBS 社区kOF$T t+DE
ftp://ftp.qtopia.org.cn/mirror/ftp.trolltech.com/freebies/tmake
6QbT8C D/{YQ0
$ieK.cQ| t0我的QtEmbedded程序中的中文字符为什么显示成方块?木铎校园 BBS 社区GX,x rmX`w
两个可能的原因:
.g[&SfsF1e0一是qte的库未编译进对中文textcodec的支持, 解决方案:修改qconfig-qpe.h, 去掉CODEC有关的宏, 重新configure和make木铎校园 BBS 社区yt0U%Fqp0v ScJ`
木铎校园 BBS 社区{ vpKy-y#O%g
二 是程序中选用的字体不是中文字体(默认的字体是Helvetica,没有中文), 需要在程序中指定一个中文字体, 如qte自带的unifont(这个字体大家普遍的看法是看上去像残废), qt4版本里新加入了文泉驿的unicode字体, 可以在源码包里找到,比较漂亮, 推荐。
:[9T9\vg5z7@[0木铎校园 BBS 社区 ^[ q'{W
如何把QtEmbedded程序移植为Qtopia程序?木铎校园 BBS 社区9k2tXJov
Qtopia里提供了简单的宏来创建主窗口、应用style等, 最主要的改变在main函数。木铎校园 BBS 社区/Y(}@RV5]5R*IPh
参考qtopia/src/applications/clock/main.cpp木铎校园 BBS 社区:QY#v9NVy#H
--------------------------------------------------
Eed%g3_7O+_0#include "mymainwindow.h"
Xye k Y0#include <qtopia/qpeapplication.h>木铎校园 BBS 社区P)\ `bFw t
QTOPIA_ADD_APPLICATION("myappname", "MyMainWindow")
4s*e s:h#??0QTOPIA_MAIN木铎校园 BBS 社区P8w;D6? Y\
---------------------------------------------------
K `,B-j vc&n5~6h9o#z0这一步很简单把,cp过来改改类名和binary的名字就OK了。
*` h)omF%~)g,m0需要注意的是你的mainwindow的构造函数要符合(QWidget*p, const char* name, int f)的形式(三个参数)木铎校园 BBS 社区}1]] ~-aa-k`v

8`7~!aZ s;zB3_E0相应的,修改pro文件。 参考qtopia/src/applications/clock/clock.pro木铎校园 BBS 社区$xT"sweK
其中最重要的一行是 CONFIG+= qtopiaapp
&`"tp c e-Q4VmW0这样编出来是quicklaunch插件程序(applications目录下的程序默认config是quichlaunch, 别的目录不是哦~)木铎校园 BBS 社区qM&`(`0ZX:B^
木铎校园 BBS 社区"? c$pX9vJ7o]9P'fa2{
要想编成独立的应用, 加上这句:CONFIG -= buildQuicklaunch木铎校园 BBS 社区@4n};S NY1jS#~G
木铎校园 BBS 社区(LEk ?C gK4jnn
大功告成!
e3Q&G#E7|"_+{%Y6z]0木铎校园 BBS 社区#n O*W7j2N
如何将自己的应用添加到qtopia桌面里?木铎校园 BBS 社区g)Wud:uh0uvP0h
首先把你的应用修改成qtopia应用程序(见上一个问题)。
!ck.YgGB"@6b0然后把你的程序cp到qtopia程序默认的搜索路径中:
b9?cLFo0应用程序放到SRCDIR/qtopia/image/opt/Qtopia/bin下;(后面的SRCDIR/qtopia/image/opt/Qtopia简写为"...")
ZQ4b(lS.^I#]0C0quicklaunch插件放到../plugins/application下。
H _,O|D^0
hr7[kC!Ht5e0假设你编译得到的quicklauncher插件叫libmybin.so, 则相应的需要在../bin下建立一个链接文件: ln -s quicklauncher mybin木铎校园 BBS 社区'br2_ d G
木铎校园 BBS 社区`^/qDN s5S
另外,还需要创建一个desktop文件(找个现成的改改), 把这个desktop文件放到qtopia的木铎校园 BBS 社区/G `$C;i4t h#M"T
../apps/Applications下。
V9F/EB9u9V0m0木铎校园 BBS 社区T8]S*Nha1J1_+Y(uR
desktop 文件里最重要的信息是关联的执行档名称和图标文件的名称。 执行档名称和上文中的mybin对应, 图标的话desktop文件里只写了一个文件的名字,但实际上qtopia去搜索的时候会到以执行档的名字命名的子目录去寻找该icon文件, 也就是.../pics/mybin/xxx.png。
u5]4xi+}'n%yN"O_@0
'L j8XEQ/V0以上环境都弄好后, 你进到Applications页面里就能看见自己的应用程序了。
(}W:hP Z%}#eEO0
T1pD6d'_(Tj0如何设置Qtopia的字体?木铎校园 BBS 社区'D1b;R2@J#r
2.x系列版本在运行时的$HOME/Settings/下有个qpe.conf文件, 其中的[Apperance]下的FontFamily字段设置字体, FontSize设置字号。木铎校园 BBS 社区0[O0f*d{

H \mE M Q6V x0Qtopia 和Qte程序都会在运行时的$QTDIR/lib/fonts目录里搜索字体, 所以你要用的字体也要放在这个地方。 另外还要根据需要修改该目录下的fontdir文件。这个文件是字体(FontFamily, FontSize...)与实际的字体文件的映射, 要写正确才能找到字体文件, 所以不可马虎。
|5B.I0G T-T0
#m0z%AN*g_Z$B#y~0为什么QtEmbedded自带的例子无法编译通过?
;{1o4G.Uo G0在编译例子的时候经常会出现这样的提示信息,无法编译:木铎校园 BBS 社区v`'uv8vB,i8l:c
“#make
Df1PK*My*oo0Some of the required modules (full-config) are not available.木铎校园 BBS 社区#\7l%W)NV9s|Q
Skipped.”
2o[c;dD,Y)^0
%q0~"Z2i[/[0这是怎么回事呢?木铎校园 BBS 社区&d)I6j y'y.xKP([
我想大家应该知道qte的库可以通过修改qconfig来增删一些特性吧, 也就是说通过定义一些宏可以去掉qte库包含的class定义,以减小qte库的大小。 所以说不同的config下编译出来的qte库多数情况下是不兼容的。
*c#{-vk3oHb O0
o M7\iu&In0大家可以从该例子的.pro文件中获得一些信息(比如aclock这个例子),在pro文件中往往会有这么一行:木铎校园 BBS 社区 X"b1N/B,N!dm
REQUIRES+=full-config木铎校园 BBS 社区;Z,yy3PW9u#H$t
这 句话表明,这个qte应用用到的类只有在full-config才能满足。 所以如果你用的是别的config选项干脆就不让你编译。 如果你非要编译也不是不可能,把这个限制去掉重新生成Makefile就可以了,不过很可能会出现undefined reference或者找不到类之类的错误, 大家要做好心理准备......木铎校园 BBS 社区+i xh!p X5Jr-bt L
木铎校园 BBS 社区hN W0i r
要想成功编译qte的例子还有个方法是用-qconfig all参数configure QtEmbedded, 这样qte库包含所有的特性, 肯定什么例子都能编过去。
pS;U,n+WE6I0木铎校园 BBS 社区2Q(aD6L4A-^;d
如何裁减QtEmbedded库?
R p5dO-q.?J~0QtEmbedded定义了一系列的features, 用木铎校园 BBS 社区.g/p(z#\'U2_3I
#ifndef NO_XXX
u*`7F!w3s_P0#endif
:F xbp'uY-[0的方式把特性相关的代码包围在特定的宏里,这样如果定义了某个NO_XXX的宏,就是去掉了该特性, 从而达到减少编译的代码,进而减小libqte的大小的目的。
v C`!N*fA+Y`0
v\/nMKY_C0你 在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
.W j5dG1L|0
h)cl/v p5|;S}"ow(G0我们要裁减qte库最好是建立一个自己的qconfig-myconfig.h文件, 把自己的程序未用到的特性对应的宏定义在这个文件里。 configure qte的时候加-qconfig myconfig选项,这样就可以使用自己的feature定义文件了。
:a x;j#HEI+wO"M0
e!rS Kq x0另外需要注意的一点是, feature之间有依赖关系,你disable某个特性很可能连带其他一些特性也被disable。 所以还要参看$QTEDIR/src/tools/qfeatures.h中对feature依赖关系的描述。
[nb(Vo"^b1M0
+X&Gc gHi0feature宏对应的功能参见文档:木铎校园 BBS 社区A`H:` t&ei%O `Gf
http://doc.trolltech.com/qtopia2.0/html/features.html木铎校园 BBS 社区a;jqG5[N
木铎校园 BBS 社区R!q:I@#YH m
Good Luck!
!R4f2sK~d0
y2]$w"\Z0
GC6pO8u&W0如何改变qvfb桌面的默认颜色(绿色)?木铎校园 BBS 社区 O ~hg0Wr$J4B
qte 2.x里提供的API:木铎校园 BBS 社区h2t'].Xjk
QWSServer::setDesktopBackground(const QColor&);木铎校园 BBS 社区k%_&z.ESb#k(fd+o
QWSServer::setDesktopBackground(const QImage&);
5lTuI U Y&o0
1bk T,u R%M-m9J0qtopia core 4里提供的API:
E E`2X`0QWSServer::setBackground(const QBrush&);木铎校园 BBS 社区1Pis8U(g6b
木铎校园 BBS 社区 a:[PO6Vxs-_v O b+x
默认的颜色在源码的qwindowsystem_qws.cpp文件, QWSServer的构造函数里赋值,也可以直接去修改源码。 木铎校园 BBS 社区 Y^ U9V$Ze ghO]
木铎校园 BBS 社区zl&Pg+ZIC3q:[

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1548996木铎校园 BBS 社区 wXM/` Xm ^7[

木铎校园 BBS 社区!V2o#c2Pm6@d7t

TAG: 嵌入式开发 linux qt qtopia

 

评分:0

我来说两句

显示全部

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

关于作者