Qt-X11/QtEmbedded/Qtopia編譯安裝常見問題

(注意,這裏都是以Qtopia2.2爲藍本的,因爲我用的是這個版本… )
Qt-X11/QtEmbedded/Qtopia及其他常見包的關係?
build Qtopia時經常能看到以下的包:
qt-x11-2.3.2
qt-x11-3.3.x
qte-2.3.x
qtopia-2.x
tmake-1.3
qmake, uic, moc

其中Qtopia編譯依賴Qte;
qt-x11-2.3只與編譯一些tool有關, 如uic,moc,qvfb..Qtopia並不依賴qt-x11;
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編譯,不過多數人是用不上的, 呵呵。
tmake用於生成Makefile文件, 用在qte應用上;
qmake包含在qtopia裏, 用於爲Qtopia應用生成Makefile文件;
uic,moc,qvfb,qmake,tmake和designer使用的時候要注意版本,2.x, 3.x, 4.x之間是不兼容的, 但相同主版本號之間是兼容的,所以我們在build Qtopia過程中經常從qt-x11-2.3中拷貝現成的uic和moc供qte使用。
編譯過程中出現一些頭文件找不到, 類未定義等等,很多時候是因爲誤使用了系統默認搜索路徑下的uic等工具造成的。大家要注意這個問題.
Qtopia/QtEmbedded版本對應關係?
Qtopia1.7.0 / Qte 2.3.7
Qtopia2.1.1 / Qte 2.3.10
Qtopia2.1.2 / Qte 2.3.11
Qtopia2.2.0 / Qte 2.3.12 (包含在qtopia2.2源碼包中)
Qtopia/QtEmbedded相關源碼包下載地址?
Qt/Qte:
[url]ftp://ftp.trolltech.com/qt/source[/url]
[url]ftp://ftp.qtopia.org.cn/mirror/ftp.trolltech.com/qt/source[/url]
Qtopia(1.6-2.2):
[url]ftp://ftp.trolltech.com/qtopia/source[/url]
[url]ftp://ftp.qtopia.org.cn/mirror/ftp.trolltech.com/qtopia/source[/url]
tmake:
[url]ftp://ftp.trolltech.com/freebies/tmake[/url]
[url]ftp://ftp.qtopia.org.cn/mirror/ftp.trolltech.com/freebies/tmake[/url]
我的QtEmbedded程序中的中文字符爲什麼顯示成方塊?
兩個可能的原因:
一是qte的庫未編譯進對中文textcodec的支持, 解決方案:修改qconfig-qpe.h, 去掉CODEC有關的宏, 重新configure和make
二是程序中選用的字體不是中文字體(默認的字體是Helvetica,沒有中文), 需要在程序中指定一箇中文字體, 如qte自帶的unifont(這個字體大家普遍的看法是看上去像殘廢), qt4版本里新加入了文泉驛的unicode字體, 可以在源碼包裏找到,比較漂亮, 推薦。
如何把QtEmbedded程序移植爲Qtopia程序?
Qtopia裏提供了簡單的宏來創建主窗口、應用style等, 最主要的改變在main函數。
參考qtopia/src/applications/clock/main.cpp
————————————————–
#include “mymainwindow.h”
#include <qtopia/qpeapplication.h>
QTOPIA_ADD_APPLICATION(”myappname”, “MyMainWindow”)
QTOPIA_MAIN
—————————————————
這一步很簡單把,cp過來改改類名和binary的名字就OK了。
需要注意的是你的mainwindow的構造函數要符合(QWidget*p, const char* name, int f)的形式(三個參數)
相應的,修改pro文件。 參考qtopia/src/applications/clock/clock.pro
其中最重要的一行是 CONFIG+= qtopiaapp
這樣編出來是quicklaunch插件程序(applications目錄下的程序默認config是quichlaunch, 別的目錄不是哦~)
要想編成獨立的應用, 加上這句:CONFIG -= buildQuicklaunch
大功告成!
如何將自己的應用添加到qtopia桌面裏?
首先把你的應用修改成qtopia應用程序(見上一個問題)。
然後把你的程序cp到qtopia程序默認的搜索路徑中:
應用程序放到SRCDIR/qtopia/image/opt/Qtopia/bin下;(後面的SRCDIR/qtopia/image/opt/Qtopia簡寫爲”…”)
quicklaunch插件放到../plugins/application下。
假設你編譯得到的quicklauncher插件叫libmybin.so, 則相應的需要在../bin下建立一個鏈接文件: ln -s quicklauncher mybin
另外,還需要創建一個desktop文件(找個現成的改改), 把這個desktop文件放到qtopia的
../apps/Applications下。
desktop文件裏最重要的信息是關聯的執行檔名稱和圖標文件的名稱。 執行檔名稱和上文中的mybin對應, 圖標的話desktop文件裏只寫了一個文件的名字,但實際上qtopia去搜索的時候會到以執行檔的名字命名的子目錄去尋找該icon文件, 也就是…/pics/mybin/xxx.png。
以上環境都弄好後, 你進到Applications頁面裏就能看見自己的應用程序了。
在qtopia1.7版本里對圖標文件的處理略有不同, 默認的圖標搜索主要是兩個位置,一個是內嵌圖標, 也就是用qembed工具生成的inlinepics_p.h, 另外 就是pics目錄下的文件。 如果在inline頭文件裏沒有找到對應的圖標數組,則會在pics目錄下搜索。 其他好像差不多。
如何設置Qtopia的字體?
2.x系列版本在運行時的$HOME/Settings/下有個qpe.conf文件, 其中的[Apperance]下的FontFamily字段設置字體, FontSize設置字號。
Qtopia和Qte程序都會在運行時的$QTDIR/lib/fonts目錄裏搜索字體, 所以你要用的字體也要放在這個地方。 另外還要根據需要修改該目錄下的fontdir文件。這個文件是字體(FontFamily, FontSize…)與實際的字體文件的映射, 要寫正確才能找到字體文件, 所以不可馬虎。
爲什麼QtEmbedded自帶的例子無法編譯通過?
在編譯例子的時候經常會出現這樣的提示信息,無法編譯:
“#make
Some of the required modules (full-config) are not available.
Skipped.”
這是怎麼回事呢?
我想大家應該知道qte的庫可以通過修改qconfig來增刪一些特性吧, 也就是說通過定義一些宏可以去掉qte庫包含的class定義,以減小qte庫的大小。 所以說不同的config下編譯出來的qte庫多數情況下是不兼容的。
大家可以從該例子的.pro文件中獲得一些信息(比如aclock這個例子),在pro文件中往往會有這麼一行:
REQUIRES+=full-config
這句話表明,這個qte應用用到的類只有在full-config才能滿足。 所以如果你用的是別的config選項乾脆就不讓你編譯。 如果你非要編譯也不是不可能,把這個限制去掉重新生成Makefile就可以了,不過很可能會出現undefined reference或者找不到類之類的錯誤, 大家要做好心理準備……
要想成功編譯qte的例子還有個方法是用-qconfig all參數configure QtEmbedded, 這樣qte庫包含所有的特性, 肯定什麼例子都能編過去。
如何裁減QtEmbedded庫?
QtEmbedded定義了一系列的features, 用
#ifndef NO_XXX
#endif
的方式把特性相關的代碼包圍在特定的宏裏,這樣如果定義了某個NO_XXX的宏,就是去掉了該特性, 從而達到減少編譯的代碼,進而減小libqte的大小的目的。
你在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
我們要裁減qte庫最好是建立一個自己的qconfig-myconfig.h文件, 把自己的程序未用到的特性對應的宏定義在這個文件裏。 configure qte的時候加-qconfig myconfig選項,這樣就可以使用自己的feature定義文件了。
另外需要注意的一點是, feature之間有依賴關係,你disable某個特性很可能連帶其他一些特性也被disable。 所以還要參看$QTEDIR/src/tools/qfeatures.h中對feature依賴關係的描述。
feature宏對應的功能參見文檔:
[url]http://doc.trolltech.com/qtopia2.0/html/features.html[/url]
Good Luck!
如何改變qvfb桌面的默認顏色(綠色)?
qte 2.x裏提供的API:
QWSServer::setDesktopBackground(const QColor&);
QWSServer::setDesktopBackground(const QImage&);
qtopia core 4裏提供的API:
QWSServer::setBackground(const QBrush&);
默認的顏色在源碼的qwindowsystem_qws.cpp文件, QWSServer的構造函數裏賦值,也可以直接去修改源碼。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章