国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
嵌入式qt的安裝和應(yīng)用
嵌入式qt的安裝和應(yīng)用
嵌入式工具Qt的安裝與使用

摘要
Qt是Trolltech公司的一個產(chǎn)品。Trolltech是挪威的一家軟件公司,主要開發(fā)兩種產(chǎn)品:一種是跨平臺應(yīng)用程序界面框架;另外一種就是 提供給做嵌入式Linux開發(fā)的應(yīng)用程序平臺,能夠應(yīng)用到PDA和各種移動設(shè)備上。Qt和 Qtopia分別是其中具有代表性的兩個。(2004-05-05 10:52:14)

--------------------------------------------------------------------------------
By lanf, 出處:http://tech.ccidnet.com/pub/article/c310_a71173_p1.html

作者:胡利民 本文選自:開放系統(tǒng)世界

Qt是Trolltech公司的一個產(chǎn)品。Trolltech是挪威的一家軟件公司,主要開發(fā)兩種產(chǎn)品:一種是跨平臺應(yīng)用程序界面框架;另外一種就是 提供給做嵌入式Linux開發(fā)的應(yīng)用程序平臺,能夠應(yīng)用到PDA和各種移動設(shè)備上。Qt和Qtopia分別是其中具有代表性的兩個。

Qt是一個多平臺的C++圖形用戶界面應(yīng)用程序框架,它能給用戶提供精美的圖形用戶界面所需要的所有元素,而且它是基于一種面向?qū)ο蟮乃枷耄杂脩魧ζ鋵ο蟮臄U(kuò)展是相當(dāng)容易的,并且它還支持真正的組件編程。

Qt是Linux桌面環(huán)境KDE的基礎(chǔ)。筆者認(rèn)為,可以說Qt與Windows下的Mfc的實(shí)質(zhì)是一樣的,所以Qt最大的優(yōu)點(diǎn)在于其跨平臺性,可以支持現(xiàn)有的多種操作系統(tǒng)平臺,主要有:

◆ MS/Windows 95、Windows 98、WindowsNT 4.0、Windows 2000、Windows XP;

◆ Unix/X11 Linux、Sun Solaris、HP-UX、Compaq True64Unix、IBM AIX、SGI IRIX和很多其它X11平臺;

◆ Macintoshi Mac OSX;

◆ Embedded—帶FramBuffer的Linux平臺。

下面簡單介紹一下Qt/Embedded和Qtopia在Linux上的安裝和使用,還有在開發(fā)過程中可能碰到的一些問題。

Qt 和Qtopia的安裝

如果需要安裝一個帶FramBuffer的Qtopia平臺,需要有以下軟件(所列舉軟件以筆者使用的為例):

◆ Qtopia 1.6.0;

◆ Tmake 1.11;

◆ Qt/Embedded 2.3.4(Qtopia 1.6.0是基于該開發(fā)平臺上開發(fā)的);

◆ Qt/Embedded 2.3.2 for X11;

◆ Qt 3.1.2 for X11。

在Trolltech公司的網(wǎng)站上可以下載該公司所提供的Qt/Embedded的免費(fèi)版本。

Qtopia平臺安裝分為以下幾個步驟:

1. 解包Qtopia

在Linux命令模式下運(yùn)行以下命令:

tar xfz qtopia-source-1.6.0 (解包)
cd qtopia-source-1.6.0
export QPEDIR=$PWD (設(shè)置環(huán)境變量)
cd..



2. 安裝Tmake

在Linux命令模式下運(yùn)行以下命令:

tar xfz tmake-1.11.tar.gz
export TMAKEDIR=$PWD/tmake-1.11
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
export PATH=$TMAKEDIR/bin
PATH




3. 安裝Qt/Embedded2.3.4

在Linux命令模式下運(yùn)行以下命令:


tar xfz qt-embedded-2.3.4-commercial.tar.gz
cd qt-2.3.4
export QTDIR=$PWD
export QTEDIR=$QTDIR
export PATH=$QTDIR/bin
PATH
export LD_LIBRARY_PATH=$QTDIR/lib
LD_LIBRARY_PATH
cp $QPEDIR/src/qt/qconfig-qpe.h src/tools/
. /configure -qconfig qpe -qvfb -depths 4,8,16,32
make sub-src
cd ..




也可以在configure的參數(shù)中添加-system-jpeg和gif,使Qtopia平臺能支持jpeg、gif格式的圖形。

4. 安裝Qt/X11 2.3.2

在Linux命令模式下運(yùn)行以下命令:


tar xfz qt-x11-2.3.2-commercial.tar.gz
cd qt-2.3.2
export QTDIR=$PWD
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
. /configure -no-opengl
make
make -C tools/qvfb
mv tools/qvfb/qvfb bin
cp bin/uic $QTEDIR/bin
cd ..




根據(jù)開發(fā)者本身的開發(fā)環(huán)境,也可以在configure的參數(shù)中添加別的參數(shù),比如-no-opengl或-no-xfs,可以鍵入./configure -help來獲得一些幫助信息。

5. 安裝Qt/X11 3.1.2

在Linux命令模式下運(yùn)行以下命令:


tar xfz qt-x11-commercial-3.1.x.tar.gz
cd qt-x11-commercial-3.1.x
export QTDIR=$PWD
export QT3DIR=$QTDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -thread
make
cd ..




6. 安裝Qtopia

在Linux命令模式下運(yùn)行以下命令:


cd qtopia-source-1.6.x
export QTDIR=$QTEDIR
export QPEDIR=$PWD
export PATH=$QPEDIR/bin:$PATH
cd src
./configure
make
cd ../..




7. 安裝Qtopia桌面


cd qtopia-source-1.6.x/src
export QTDIR=$QT3DIR
./configure -qtopiadesktop
make
mv qtopiadesktop/bin/qtopiadesktop ../bin
cd ..





Qt和Qt Designer的使用

根據(jù)上面的步驟安裝完成了Qt/Embedded和Qtopia之后,就可以運(yùn)行這些程序了。

運(yùn)行Qt的虛擬仿真窗口:在Linux的圖形模式下運(yùn)行命令qvfb&;Qtopia只是一個用Qt/Embedded開發(fā)的程序,運(yùn)行Qtopia,在圖形模式下運(yùn)行命令:


export QTDIR=$QTEDIR,
qpe &;




這樣Qtopia的程序就運(yùn)行在QVFB上,即Qt的虛擬仿真窗口。

Qt/Embedded是針對嵌入式Linux而開發(fā)的一種開發(fā)工具,Qt封裝了一些常用的類,而且這些類的名字都以Q字開頭命名,如QString、QDialog等。這里主要介紹一下如何利用Qt Designer來設(shè)計(jì)組件,并生成相應(yīng)的代碼。

在Qt中,把組件分為復(fù)合體、原始體和配件。而在Qt中,組件是由一些抽象類、復(fù)雜的組件類、管理組件幾何特性的類等組成。

Qt中有三個主要的基類:QObject、Qapplication和QWidget。

在Qt 中編程,利用Signal和Slot進(jìn)行對象之間的通信是Qt的主要特征。它與Windows中的消息機(jī)制非常類似,但是Signal和Slot機(jī)制真正 實(shí)現(xiàn)了一種消息的封裝。當(dāng)對象的狀態(tài)改變時(shí),發(fā)出Signal,通知所有的Slot接受Signal,盡管它不知道哪些函數(shù)是Slot,Slot一開始也 不知道哪些Signal可以接收。Signal和Slot之間不是一一對應(yīng)的關(guān)系,一個Signal可以發(fā)給多個Slot, Slot也可以接收多個Signal。Slot除了可以接收Signal以外,與其它的成員函數(shù)沒有區(qū)別。這種機(jī)制比使用回調(diào)函數(shù)要靈活,但是會減慢程序 的運(yùn)行速度。不過在現(xiàn)在高速CPU的面前,這種損失是無足輕重的,而且它還能保證程序的簡明性和靈活性,非常便利。

在Qt的組件中,不僅定義了常用的成員變量和成員函數(shù),還定義了所有與該組件相關(guān)的Signal和Slot。

要將組件組合起來,最簡單的方法就是使用Qt Designer。首先要啟動Qt Designer,在Linux命令模式下,鍵入以下命令(假設(shè)Qt安裝在/usr/local下):


cd qt-2.3.2/bin
./designer




這樣就可以啟動一個與Windows下的Delphi相類似的如圖1的界面。


然后新建一個QFrame,將自己需要的組件直接拖拉到這個Frame中,相信很多人都有過這樣的經(jīng)歷,此處就不再詳細(xì)描述了。完成之后存盤時(shí),會將這個 新的組件保存為一個擴(kuò)展名為.ui的文件。假設(shè)所存的文件名為test.ui,用vi test.ui來查看這個文件,發(fā)現(xiàn)這是一個用xml語言寫的一個文本。下面用這個test.ui生成相應(yīng)的test.h和test.cpp。同樣還是在 這個目錄下,可以看到一個uic的工具,這個是Qt專門用來將ui文件生成.h和.cpp文件的,在終端模式下鍵入以下命令:


./uic -o test.h test.ui
./uic -o test.h -i test.cpp test.ui





此時(shí)就能看到生成了相應(yīng)test.h和test.cpp,這是一個類。當(dāng)然這只是一些表面的東西,還需要在這些代碼中添加相應(yīng)的Signal和Slot, 完成所需要的操作。值得注意的是,相應(yīng)版本生成的ui最好用相應(yīng)版本的uic來生成代碼。如果用Qt 3.1.2的Designer生成的ui,用Qt 2.3.2的uic來生成代碼,生成的代碼都會是一些空函數(shù)。

在一般的開發(fā)過程中,首先通過這個ui生成的一個類,在Qt中通常叫做 Base,如上面的例子,叫做testBase;然后再新建一個類,來繼承這個Base。通常叫做實(shí)現(xiàn)類Impl,如testImpl。在這個實(shí)現(xiàn)類里面 定義所需要的成員函數(shù)、Signal和Slot,因?yàn)閡i可能是經(jīng)常需要改動的。如果這樣做,每次只需要在Designer中修改ui,而不用去理會這些 成員函數(shù)、Signal和Slot了。

編譯一個Qt程序必然需要Makefile,在Qt中提供了一個專門生成Makefile的工具,就是tmake。用tmake需要根據(jù)編寫的程序?qū)懸粋€.pro文件。.pro文件非常簡單,有固定的格式,下面是一個例子:


TEMPLATE = app
CONFIG = qtopia warn_on release
MOC_DIR =tmp
OBJECTS_DIR =tmp
HEADERS =fcrs.h\
structs.h \
globalfunc.h \
globalvars.h \
testimpl.h
SOURCES = main.cpp \
globalfunc.cpp\
globalvars.cpp \
testimpl.cpp
INTERFACES = test.ui \
TARGET = fcrs




生成這個.pro文件之后,在終端中鍵入下面的命令:


tmake -o Makefile test.pro




就自動生成了一個Makefile,使用這個Makefile編譯所編寫的程序就可以了。



Qt/Embedded開發(fā)環(huán)境建立的過程

--------------------------------------------------------------------------------


Qt/Embedded開發(fā)環(huán)境建立的過程:
(這些軟件可以免費(fèi)從trolltech的WEB或FTP服務(wù)器上下載)
◆ tmake 1.11 或更高版本; (生成Qt/Embedded應(yīng)用工程的Makefile文件)
◆ Qt/Embedded 2.3.7 (Qt/Embedded 安裝包)
◆ Qt 2.3.2 for X11; (Qt的X11版的安裝包, 它將產(chǎn)生x11開發(fā)環(huán)境所需要的兩個工具)
1、安裝tmake
在Linux 命令模式下運(yùn)行以下命令:
tar xfz tmake-1.11.tar.gz
export TMAKEDIR=$PWD/tmake-1.11
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
export PATH=$TMAKEDIR/bin:$PATH
2. 安裝Qt/Embedded 2.3.7
在Linux 命令模式下運(yùn)行以下命令:
tar xfz qt-embedded-2.3.7.tar.gz
cd qt-2.3.7
export QTDIR=$PWD
export QTEDIR=$QTDIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -qconfig -qvfb -depths 4,8,16,32
make sub-src
cd ..
上述命令 ./configure -qconfig -qvfb -depths 4,8,16,32 指定Qt 嵌入式開發(fā)包生
成虛擬緩沖幀工具qvfb,并支持4,8,16,32 位的顯示顏色深度。另外我們也可以在
configure 的參數(shù)中添加-system-jpeg 和gif,使Qt/Embedded 平臺能支持jpeg、gif
格式的圖形。
上述命令 make sub-src 指定按精簡方式編譯開發(fā)包,也就是說有些Qt 類未被編
譯。Qt 嵌入式開發(fā)包有5 種編譯范圍的選項(xiàng),使用這些選項(xiàng),可控制Qt 生成的庫文件的大
小,但是您的應(yīng)用所使用到的一些Qt 類將可能因此在Qt 的庫中找不到鏈接。編譯選項(xiàng)的具
體用法可運(yùn)行./configure -h(huán)elp 命令查看。
3. 安裝Qt/X11 2.3.2
在Linux 命令模式下運(yùn)行以下命令:
tar xfz qt-x11-2.3.2.tar.gz
cd qt-2.3.2
export QTDIR=$PWD
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -no-opengl
make
make -C tools/qvfb
mv tools/qvfb/qvfb bin
cp bin/uic $QTEDIR/bin
cd ..
根據(jù)開發(fā)者本身的開發(fā)環(huán)境,也可以在configure 的參數(shù)中添加別的參數(shù),比如
-no-opengl 或-no-xfs,可以鍵入./configure -help 來獲得一些幫助信息。
如果Qt/Embedded 的應(yīng)用是在UNIX 平臺下開發(fā)的話,那么它就可以在開發(fā)的機(jī)器
上以一個獨(dú)立的控制臺或者虛擬緩沖幀的方式來運(yùn)行,對于后者來說,其實(shí)是有一個X11
的應(yīng)用程序虛擬了一個緩沖幀。通過指定顯示設(shè)備的寬度,高度和顏色深度,虛擬出來
的緩沖幀將和物理的顯示設(shè)備在每個像素上保持一致。這樣每次調(diào)試應(yīng)用時(shí)開發(fā)人員就
不用總是刷新嵌入式設(shè)備的FLASH 存儲空間,從而加速了應(yīng)用的編譯、鏈接和運(yùn)行周期。
運(yùn)行Qt 的虛擬緩沖幀工具的方法是:在Linux 的圖形模式下運(yùn)行命令:
qvfb (回車)
當(dāng)Qt 嵌入式的應(yīng)用程序要把顯示結(jié)果輸出到虛擬緩沖幀時(shí),我們在命令行運(yùn)行這
個程序時(shí),在程序名后加上-qws 的選項(xiàng)。例如: $> hello -qws


一,QT/E的安裝。
在本機(jī)中安裝了包括QT4.0.1(WINDOWS版本)以及QT/E2。3。7(LINUX版本)。
QT/E我安裝在我的虛擬機(jī)中。因?yàn)镼T/E2.3.7的版本問題,其適宜在REDHAT9。0版本(或更低版本)下安裝,否則安裝不成功。
QT/E安裝過程復(fù)雜,具體細(xì)節(jié)可以參考下面這篇文章?!禥t/Embedded開發(fā)環(huán)境建立的過程》
此文在網(wǎng)上可搜索到。

本機(jī)下虛擬機(jī)中QT/E安裝路徑為:/home/wangxl/QTE/qt-2.3.7
QT/X11安裝路徑為:/home/wangxl/QTE/qt-2.3.2
Tmake安裝路徑為:/home/wangxl/QTE/Tmake-1.8

QT/E下載地址為:ftp://ftp.rediris.es/mirror/Qt/source/
Tmake下載地址為:ftp://ftp.trolltech.com/freebies/tmake/

二.QT與QT/E以及QT3與QT4之間的區(qū)別
相對來說QT與QT/E的語法一樣,所不同之處在庫類大小或者庫類函數(shù)大小不同而已。QT/E相對于QT來說,不具有少數(shù)類或者少數(shù)函數(shù)的支持。具體QT/E是否包含某個類或者包含某個類中的函數(shù),我的方法是在QT/E安裝目錄下的include文件夾中去查找。
QT3和QT4有很多不同點(diǎn),主要不同也是在于庫類以及支持函數(shù)有所變化,比如,有些QT3中的函數(shù),在QT4中被其他函數(shù)名所代替,因此很多QT4程序在QT3環(huán)境下無法執(zhí)行。QT/E2.3.7與QT3基本相同,除了我前面提到的QT與QT/E的差別。

三.QT/E編譯與執(zhí)行。
1.在QT/E編譯與執(zhí)行前要先設(shè)置TMAKE與QT/E LIB環(huán)境,具體方法如下:
[root@localhost tmake-1.8]# export TMAKEDIR=$PWD
[root@localhost tmake-1.8]# export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
[root@localhost tmake-1.8]# export PATH=$TMAKEDIR/bin:$PATH
[root@localhost qt-2.3.7]# export QTDIR=$PWD
[root@localhost qt-2.3.7]#export QTEDIR=$QTDIR
[root@localhost qt-2.3.7]#export PATH=$QTDIR/bin:$PATH
[root@localhost qt-2.3.7]#export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

2.如果你是用DESIGNER工具設(shè)計(jì)的界面(后面有講),則要將*.ui文件轉(zhuǎn)換成*.h文件和*.cpp文件。轉(zhuǎn)換方法如下:
uic –o test.h test.ui
uic –o test.cpp –i test.h test.ui

3.編寫一個*.pro文件(用來生成Makefile文件用),該文件格式比較固定。
如test.pro文件基本格式如下(以test.cpp ,test.h main.cpp為例子):
EMPLATE = app
CONFIG += qt warn_on release
HEADERS = test.h
SOURCES = test.cpp \
main.cpp
TARGET = hello
DEPENDPATH=/home/wangxl/QTE/qt-2.3.7/include
REQUIRES=

4.生成Makefile文件
方法為:tmake –o Makefile test.pro
5 編譯生成可執(zhí)行文件
make

6 打開QVFB
進(jìn)入安裝QT/X11所在目錄, 在BIN目錄下執(zhí)行程序qvfb。
有時(shí)候需要修改qvfb執(zhí)行時(shí)的deptb參數(shù)才能夠執(zhí)行QT/E程序。可以直接在QVFB打開窗口的Configure彩單項(xiàng)中選擇,也可以用如下命令執(zhí)行QVFB。
./qvfb –width ** -height ** -depth **
7.執(zhí)行QT/E程序
如 。/TEST
在QVFB程序打開的窗口中將出現(xiàn)TEST程序的顯示 。

四.Qt/e與QT/X11
安裝QT/E的同時(shí)還需要安裝QT/X11與Tmake,Tmake 是用來幫助生成Makefile文件的。安裝QT/X11主要是向QT/E提供designer工具和qvfb工具的。
Designer可以用來設(shè)計(jì)圖形界面,最后生成.ui文件,可通過UIC命令轉(zhuǎn)換為相應(yīng)的C++文件。
QVFB模擬幀緩沖,提供QT/E程序的顯示平臺。

五.QT/E 程序ARM 板上執(zhí)行
在我虛擬機(jī)上可以執(zhí)行的QT/E程序不能在ARM板上執(zhí)行,需要對QT/E進(jìn)行重新編譯,并需要設(shè)置響對于ARM板系統(tǒng)的編譯環(huán)境,具體方法可以參考我另外的一文《QT/E開發(fā)記錄》

六.QT/E支持中文顯示問題
QT/E需要字體轉(zhuǎn)換才能顯示中文。具體方法可以參考我另外的一文《QT/E開發(fā)記錄》
但是由于缺少UNICODE的QPF文件的字體,中文字大小不均勻問題尚沒解決。

七 QT/E的一些參考資料:
http://www.qtcn.org/bbs/index.php QT中文論壇
http://www.qiliang.net/qt/ (關(guān)于QT3的類,以及類函數(shù)可以在這尋找)
提供QT3編程最好書籍的電子版本《C++ GUI Programming with QT 3》(本機(jī))
關(guān)于QT4可以參考QT ASSISTNAT(本機(jī)中),另外QT ASSISTNAT中也可以查找QT3的類及庫等。



設(shè)置Qtopia的build環(huán)境
1、環(huán)境變量
在目標(biāo)系統(tǒng)上build Qtopia必須設(shè)定必要的環(huán)境變量,如QTDIR, 如果依賴多個版本的Qt,則需要用環(huán)境變量指向用到的庫配置。
一種方法是將環(huán)境變量的設(shè)定寫入文件,通過運(yùn)行source命令應(yīng)用文件的內(nèi)容。

舉例說明:
Linux/bash下建立環(huán)境變量設(shè)定文件qtopia.sh, 內(nèi)容如下:
export QPEDIR=/opt/Qtopia
export QTDIR=/opt/Qtopia
export PATH=$QTDIR/bin:$PATH
export TMAKEPATH=/opt/Qtopia/tmake/lib/qws/linux-generic-g++
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

需要時(shí)運(yùn)行 source qtopia.sh即可應(yīng)用以上環(huán)境變量。

另外也可以通過在.bashrc文件中設(shè)定別名來應(yīng)用這些環(huán)境變量。 假設(shè)環(huán)境變量設(shè)置文件存放在home目錄的bin下, 則可在.bashrc中加入:
alias qtopia=‘source ~/bin/qtopia.sh‘

2、創(chuàng)建自定義的配置文件

整個Qtopia系統(tǒng)在build過程中需要三個獨(dú)立的配置系統(tǒng):
1) Qt/Embedded 配置文件
2) tmake - 用于build Qtopia 1.x和一些第三方軟件
3) qmake - 用于build Qtopia 2及以上版本

在build Qtopia以前,先要完成以上三項(xiàng)的配置。

下面是創(chuàng)建一個“myarm”配置的例子:
cp -r $TMAKEDIR/lib/qws/linux-arm-g++ $TMAKEDIR/lib/qws/linux-myarm-g++
cp -r $QTEDIR/configs/linux-arm-g++-shared $QTEDIR/configs/linux-myarm-g++-shared
cp -r $QPEDIR/mkspecs/qws/linux-arm-g++ $QPEDIR/mkspecs/qws/linux-myarm-g++
Qt/Embedded
編輯$QTEDIR/configs/linux-myarm-g++-shared, 修改其中的utilities和flags成適合系統(tǒng)的內(nèi)容, 如:
可能需要修改SYSCONF_CXX, SYSCONF_CC 和SYSCONF_LINK, 指定正確的編譯器. 可能需要增加編譯選項(xiàng)-DMYARM,在代碼中增加宏#ifdef MYARM(用以增加設(shè)備相關(guān)的代碼)
tmake
編輯$TMAKEDIR/lib/qws/linux-myarm-g++/tmake.conf,修改用到的utilites和flags:
可能需要修改TMAKE_CC, TMAKE_CXX 和TMAKE_LINK
可能需要增加-DMYARM選項(xiàng)
qmake

修改$QPEDIR/mkspecs/qws/linux-myarm-g++/qmake.conf:

QMAKE_CC, QMAKE_CXX 和QMAKE_LINK
-DMYARM
注意:qmake.conf的最后一行必須是:
exists($$(QPEDIR)/src/config.pri):include($$(QPEDIR)/src/config.pri)


可用于目錄名的字符

正則表達(dá)式字符

Qtopia 1.9.x和Qtopia 2.0.0 - 2.1.0對字符有以下的要求:

Qtopia build系統(tǒng)訪問到的任何目錄都不能包含正則表達(dá)式字符
任何能被QRegExp識別的特殊字符和字符序列都可能引起問題
‘.‘字符只匹配自身
不要將正則表達(dá)式字符用于目錄名,包括(但不僅限于): + . ? * \ () [] ^ $ {}
注:Qtopia 2.1.0和2.1.1及以上版本可以通過應(yīng)用patch解除以上的限制

空格

Qtopia build系統(tǒng)不支持目錄名中包含空格。

必須保證:

build系統(tǒng)訪問到的目錄不包含空格
訪問目錄的各層上級目錄也不包含空格

Qtopia的依賴和必要條件

簡介
為了使Qtopia正確運(yùn)行, 必須滿足以下的必要條件:
安裝適當(dāng)?shù)木幾g/交叉編譯工具
Qt/Embedded-2.3.11
Linux kernel提供共享內(nèi)存、mmap和socket支持
Linux支持frame buffer
Linux支持OSS聲音或支持與OSS兼容的ALSA聲音。 進(jìn)一步的信息參考 The Qtopia A/V & Appearance FAQ
還需要以下的庫:

Video4Linux
zlib
libuuid(aka luuid)
libjpeg
xorg 或X11
注:Freetype不是必須的但建議支持 http://freetype.sourceforge.net/index2.html


支持的編譯器和交叉編譯器

gcc-2.95.2
gcc 3.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將這個值設(shè)置為0x4000c.
SNDCTL_DSP_SETFM - Qtopia設(shè)置為AFMT_S16_LE
SNDCTL_DSP_STEREO - Qtopia 設(shè)置為 1/true.
SNDCTL_DSP_SPEED - Qtopia設(shè)置為44100.
SNDCTL_DSP_GETOSPACE
Qtopia 還需要/dev/dsp可以以阻塞方式和非阻塞方式打開。 以上的設(shè)定是Qtopia需要的設(shè)定,但可以容許少許的偏差,但如果不設(shè)定成Qtopia需要的值則不能保證音頻能平滑播放。 假如您的設(shè)備只支持22500的播放速率,則在調(diào)用SNDCTL_DSP_SPEED時(shí)要報(bào)告此速率,以免造成音頻質(zhì)量的缺損。 不過,如果系統(tǒng)不支持GETOSPACE,非阻塞寫入或 SNDCTL_DSP_SET_FRAGMENT, 幾乎可以肯定必然會損失音頻質(zhì)量。


Video4Linux

Camera應(yīng)用程序需要支持Video4Linux v1的內(nèi)核, Qtopia沒有提供該支持。

請參考官方的 Video for Linux 資源站點(diǎn),參看API的詳細(xì)內(nèi)容。


zlib

zlib可以從 http://www.gzip.org/zlib/ 下載


libuuid(aka luuid)

Qtopia不提供uuid支持。 這個庫可以從 http://e2fsprogs.sourceforge.net/ 站點(diǎn)下載

另外, 如果你有SuSE Linux的發(fā)行版, e2fsprogs-devel這個包可以提供uuid支持; 在Debian中對應(yīng)的包是uuid-dev. 這個庫應(yīng)該放在標(biāo)準(zhǔn)路經(jīng)下/usr/lib/libuuid.so


請用包管理工具來查看該包是否已經(jīng)安裝:

rpm -qa | grep e2fsprogs

如果尚未安裝,請從安裝盤或鏡像站安裝這個包。

需要注意的是,如果沒有安裝e2fsprogs-devel,在鏈接時(shí)會發(fā)生下面的錯誤:

/usr/lib/gcc-lib/i586-suse-Linux/3.3.3/../../../../i586-suse-linux/bin/ld:
cannot find -luuid
如果安裝了該庫仍遇到上述錯誤,則檢查Qtopia的configure腳本的-L和-R參數(shù), 以確定腳本包含了庫的實(shí)際路徑。 關(guān)于交叉編譯的信息可參考 System Integrator‘s Guide.


libjpeg

Qtopia不提供jpeg庫。 Qtopia需要Qt/Embedded配置為支持jpeg。

libjpeg庫可從 http://www.ijg.org/ 下載

此外,如果你有SuSE發(fā)行版, libjpeg這個包可提供該庫。 這個庫應(yīng)該安裝在標(biāo)準(zhǔn)路經(jīng)/usr/lib/libjpeg.so

檢查libjpeg包是否已經(jīng)安裝:

rpm -qa | grep libjpeg

如果未安裝,請從安裝盤或鏡像站安裝。

關(guān)于libjpeg交叉編譯的信息, 可參考System Integrator‘s Guide.


xorg或X11

開發(fā)包括有從以下站點(diǎn)下載:

http://www.xfree86.org/
http://xorg.freedesktop.org
相關(guān)討論

決定開始Qtopia需要的步驟, 參考: Getting started

將Qtopia集成到特定設(shè)備上的重點(diǎn)步驟, 參考: System Integrator‘s guide

Qtopia的FAQs,參看: Qtopia index page


系統(tǒng)是完全安裝RedHat9.0(里面帶QT3.1),板子是X-Hyper250B的,Toolchain用的是開發(fā)板帶的hybus-arm-linux-R1.1

交叉編譯所用到的文件:
qt-embedded-2.3.10-free.tar.gz
qt-x11-2.3.2.tar.gz
qtopia-free-source-2.1.1.tar.gz
tmake-1.13.tar.gz
e2fsprogs-1.35.tar.gz

主機(jī)x86的編譯步驟:
tar xfz qt-embedded-2.3.10-free.tar.gz(解壓后qt-2.3.10改名為qt-2.3.10-host)
export QTEDIR=$PWD/qt-2.3.10-host
tar xfz qt-x11-2.3.2.tar.gz(解壓后qt-2.3.2)
export QT2DIR=$PWD/qt-2.3.2
tar xfz qtopia-free-source-2.1.1.tar.gz(解壓后qtopia-free-2.1.1改名為qtopia-2.1.1-host)
export QPEDIR=$PWD/qtopia-2.1.1-host
tar xfz tmake-1.13.tar.gz(解壓后tmake-1.13)
export TMAKEDIR=$PWD/tmake-1.13
export TMAKEPATH=$PWD/tmake-1.13/lib/qws/linux-x86-g++
export PATH=$TMAKEDIR/bin:$PATH

cd qt-2.3.2
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -no-xft
make
make -C tools/qvfb
cd ..

cd qt-2.3.10-host
export QTDIR=$PWD
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
mkdir bin (因?yàn)榻鈮汉蟮膓t-2.3.10沒有bin文件夾)
cp $QT2DIR/bin/uic bin
cp $QT2DIR/tools/qvfb/qvfb bin
cp $QPEDIR/src/qt/qconfig-qpe.h src/tools/
./configure -qconfig qpe -qvfb -thread -system-jpeg -gif -depths 4,8,16,32
make
cd ..

tar xzf e2fsprogs-1.35.tar.gz
cd e2fsprogs-1.35
./configure -enable-elf-shlibs
make install lib/uuid/
注:這是編譯x86的libuuid庫
cd ..

cd qtopia-2.1.1-host
export PATH=$QPEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH
./configure
make

編譯例子:
$qmake -project ==>>我都是這樣創(chuàng)建.pro文件的
$tmake -o Makefile hello.pro
$make
$qvfb &
$./hello -qws 或者$qpe
還沒怎么仔細(xì)研究過。


目標(biāo)機(jī)arm-linux的編譯步驟:
tar xfz qt-embedded-2.3.10-free.tar.gz(解壓后qt-2.3.10改名為qt-2.3.10-target)
export QTEDIR=$PWD/qt-2.3.10-target
tar xfz qt-x11-2.3.2.tar.gz
export QT2DIR=$PWD/qt-2.3.2
tar xfz qtopia-free-source-2.1.1.tar.gz(解壓后qtopia-free-2.1.1改名為qtopia-2.1.1-target)
export QPEDIR=$PWD/qtopia-2.1.1-target
tar xfz tmake-1.13.tar.gz
export TMAKEDIR=$PWD/tmake-1.13
export TMAKEPATH=$PWD/tmake-1.13/lib/qws/linux-arm-g++
export PATH=$TMAKEDIR/bin:$PATH

cd qt-2.3.2
export QTDIR=$QT2DIR
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
./configure -no-xft
make
make -C tools/qvfb
cd ..

cd qt-2.3.10-target
export QTDIR=$PWD
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
mkdir bin
cp $QT2DIR/bin/uic bin
cp $QT2DIR/tools/qvfb/qvfb bin
cp $QPEDIR/src/qt/qconfig-qpe.h src/tools/
./configure -xplatform linux-arm-g++ -qconfig qpe -qvfb -thread -system-jpeg -gif -depths 4,8,16,32
make
cd ..
注:這里需要arm版本的libjpeg.so.62,hybus-arm-linux-R1.1里面包含這個庫;如沒有可以上網(wǎng)下載。

tar xzf e2fsprogs-1.35.tar.gz
cd e2fsprogs-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-R1.1/arm-linux
make install lib/uuid/ ===>>>這步安裝到hybus-arm-linux-R1.1/lib上的libuuid.so.1.2版本不對,
要cp lib/libuuid.so.1.2 ../hybus-arm-linux-R1.1/lib
注:這步是交叉編譯arm的libuuid庫,配置詳情見./configure --help
(還要多謝 http://panjet.wleda.com/?p=20 這里面的大哥呀,好不容易才在網(wǎng)上找到的)
cd ..

cd qtopia-2.1.1-host
export PATH=$QPEDIR/bin:$PATH
export LD_LIBRARY_PATH=$QPEDIR/lib:$LD_LIBRARY_PATH
cp src/libraries/qtopia/custom-linux-ipaq-g++.cpp src/libraries/qtopia/custom-linux-arm-g++.cpp
cp src/libraries/qtopia/custom-linux-ipaq-g++.h src/libraries/qtopia/custom-linux-arm-g++.h
./configure -xplatform linux-arm-g++
make
注:這里需要libstdc++.so和libgcc_s.so庫


develop環(huán)境下qt中文化程序設(shè)計(jì)

原文出處:Linux公社
原文作者:yfy001


kdevelop是一款在linux平臺下可以同windows環(huán)境下的vc相媲美的集成開發(fā)環(huán)境,qt則是一款支持包括windows和linux平臺
的GUI庫,可以說它是linux下的MFC.在顯示上,qt使用Unicode作為內(nèi)部編碼,可以支持多種編碼.如何使用qt進(jìn)行國際化編程
在網(wǎng)上可以找到很多資料的,但都是針對較早版本的qt進(jìn)行介紹的.qt3.0.5中對這些作了些改動,這些方法就相應(yīng)的要做些改動.
而且在kdevelop中開發(fā)qt應(yīng)用程序,將會事半功倍.我的開發(fā)環(huán)境為redhat8.0(需安裝kde開發(fā)工具包).
首先在linux中打開kdevelop集成開發(fā)環(huán)境,用它的應(yīng)用程序向?qū)陆ㄒ粋€qt的SDI的應(yīng)用程序框架.這個同windows下vc很類似.它
將會為你自動生成版本號,作者,e-mail等信息的單文檔對話框的應(yīng)用程序框架.我們首先對它自動生成的程序進(jìn)行漢化(qt1是
我的項(xiàng)目名稱).
1.漢化自動生成的程序
添加翻譯文件
在"項(xiàng)目"菜單中選擇"添加新的翻譯文件",語言選擇"zh_CN.Gb2312".將會創(chuàng)建一個zh_CN.GB2312字符編碼的翻譯文件.擴(kuò)展名
為".ts".在qt3.0.5環(huán)境下,打開"*.ts"翻譯文件的工具是linguist.你可以在"工具"菜單中選擇"QT
linguist"來打開,在linguist菜單中選擇"file"->"open"打開所要翻譯的翻譯文件.此時(shí)可以在linguist窗口中的source text中
的文本就是你所要翻譯的文本,選擇所要翻譯的文本,在下方有一個類似一頁紙一樣的地方,在translate下輸入翻譯后的文本.
所示.
翻譯完這些文件后,編譯運(yùn)行,在我們的程序里并不能顯示中文,還是英文,我們還需要做的就是用lrelease命令將翻譯后的文件轉(zhuǎn)換
成".qm"文件才可以使用.在控制臺下進(jìn)入你用kdevelop所生成的應(yīng)用程序目錄.
>lrelease Makefile.am
qt3.0.5用這個兩個程序取代了以前版本的findtr和msg2qm命令.在kdevelop集成環(huán)境中打開main.cpp主函數(shù),
......
QApplication a(argc, argv);
a.setFont(QFont("helvetica", 10));
QTranslator tor( 0 );
tor.load( QString("qt1.") + QTextCodec::locale(), "." );
// tor.load( QString("qt1.zh_CN.GB2312"), "." );
a.installTranslator( &tor );
/* uncomment the following line, if you want a Windows 95
look*/
// a.setStyle(WindowsStyle);

Qt1App *qt1=new Qt1App();
//Form1 *qt1=new Form1();
a.setMainWidget(qt1);
......
此處:
tor.load( QString("qt1.") + QTextCodec::locale(), "." );
是根據(jù)客戶環(huán)境的locale來載入當(dāng)前目錄下相應(yīng)的翻譯文件的.redhat中文環(huán)境默認(rèn)的locale為gb18030,
此處要么把翻譯文件名由qt1.zh_CN.GB2312.qm改為qt1.zh_CN.GB18030.qm,要么將這句改為
tor.load( QString("qt1.zh_CN.GB2312"), "." );
不過為了國際化編程的需要,建議采用第一種方法.更改后編譯運(yùn)行,你會發(fā)現(xiàn)你的程序已經(jīng)是中文界面的了.

2.漢化自己的對話框
大多數(shù)情況下我們都需要自己來設(shè)計(jì)對話框,qt為我們提供了非常好的對話框編輯器QtDesigner,可以很方便的設(shè)計(jì)我們的對話框,qt
的信號和槽等,關(guān)于QtDesigner的使用,限于篇幅,不再贅述.以前面的程序?yàn)榛A(chǔ).在kdevelop中選擇"文件"->"新建",選擇Qt
Designer文件(*.ui).在文件名一欄中填寫"mydialog",最后點(diǎn)擊確定按鈕,即會啟動QtDesigner,此處只拖了一個Label,寫了一
些英文字符.對話框的name屬性為Form1.將對話框mydialog.ui保存.
在控制臺下進(jìn)入你用kdevelop所生成的應(yīng)用程序目錄.
>lupdate Makefile.am
同樣用"QT
linguist"來翻譯qt1.zh_CN.GB2312.tr文件.此時(shí)linguist的context中會多出Form1的選項(xiàng),這里面就是我們新建的對話框要翻譯的
選項(xiàng).依據(jù)前面的方法進(jìn)行漢化.
>lrelease Makefile.am
生成qt1.zh_CN.GB2312.qm文件.
編譯將會生成mydialog.cpp mydialog.h mydialog.moc文件.然后將main.cpp中的
Qt1App *qt1=new Qt1App();改為
Form1 *qt1=new Form1();
并將"mydialog.h" #include
進(jìn)去.依據(jù)前面的方法更改tor.load中加載的翻譯文件.編譯運(yùn)行,你的對話框也是中文的了.

3.其它的一些說明
由于qt返回的是Unicode編碼,譬如你在LineEdit中直接輸入中文,返回的就是??,qt中可以直接使用QTextCodec來轉(zhuǎn)換字符串的編碼.
QString string;
string=LineEdit1->text(); //取得LineEdit1返回的文字
QTextCodec *codec=QTextCodec::codecForName("GBK");
//轉(zhuǎn)換編碼
QCString
chinese_string=codec->fromUnicode(string);//用QCString來存儲返回的多字節(jié)編碼
當(dāng)然,你在頭文件中就必需加入
#include <qtextcodec.h>
#include <qstring.h>
#include <qcstring.h>

4.QTextStream對中文的支持
QTextCodec* codec = QTextCodec::codecForName("GBK"); /* 當(dāng)前編碼為"GBK" */
QTextStream mystream(&file);
mystream.setCodec(codec);

5. QCString&QString
QCString中不以unicode編碼
QString以unicode為編碼.
qt內(nèi)部使用unicode為編碼,所以如果要在qt的部件如multilineedit中顯示中文,則需要將非unicode的字符轉(zhuǎn)換成unicode字符.
QCString locallyEncoded = "中國人不是東亞病夫"; // text to convert
QTextCodec *codec = QTextCodec::codecForName("GBK"); // get the codec for GBK
QString unicodeString = codec->toUnicode( locallyEncoded );

http://www-128.ibm.com/developerworks/cn/l...oolkit/qt/i18n/

Qt 國際化編程




內(nèi)容:

1. Qt 的文本顯示

2. Qt 的文本輸入

3. Qt 的打印

對本文的評價(jià)



訂閱:

developerWorks 時(shí)事通訊






于明儉

2002 年 1 月 09 日

本篇討論 Qt 庫對國際化的支持,將介紹 Qt 對文本顯示,輸入和打印的支持,和如何 使用Qt 開發(fā)國際化的軟件。
Qt 目前的版本(2.2.4)對國際化的支持已經(jīng)相當(dāng)完善。 在文本顯示上,Qt 使用了Unicode 作為內(nèi)部編碼,可以同時(shí)支持多種編碼。 為 Qt 增加一種編碼的支持也比較方便,只要 增加該編碼和Unicode的轉(zhuǎn)換編碼便可以了。 Qt 目前支持ISO標(biāo)準(zhǔn)編碼ISO 8859-1, ISO 8859-2,ISO 8859-3,ISO 8859-4,ISO 8859-5,ISO 8859-7,ISO 8859-9,和 ISO 8859-15(對于阿拉伯語和希伯來語的支持正在開發(fā)之中),中文GBK/Big5,日文 eucJP/JIS/ShiftJIS,韓文eucKR,俄文KOI8-R。 當(dāng)然也可以直接使用UTF8編碼。

Qt 使用了自己定義的Locale機(jī)制,在編碼支持和信息文件(Message File)的翻譯上彌補(bǔ)了目前Unix上所普遍采用Locale和gettext的不足之處。 Qt 的這種機(jī)制可以使 Qt 的同一組件(QWidget)上同時(shí)顯示不同編碼的文本。 比如,Qt 的標(biāo)簽上可以同時(shí)使用中文簡體 和中文繁體文本。

在文本輸入上,Qt 采用了XIM(X Input Method)標(biāo)準(zhǔn)協(xié)議,可以直接使用XIM輸入服務(wù)器。 由于目前的絕大多數(shù)輸入服務(wù)器都是針對單一語言的,所以在 Qt 的標(biāo)準(zhǔn)輸入組件( QLineEdit,QMultiLineEdit)中的輸入受到單一編碼的限制,Qt 還不支持動態(tài)切換編碼輸入的支持,這是它的不足之處。

1. Qt 的文本顯示
像普通的國際化過程一樣,Qt 使用了類似GNU gettext一樣的函數(shù) QObject::tr(),它 用于從Qt的信息文件 .qm 中取出信息,這些信息是經(jīng)過 Qt 的工具處理的。 Qt在處理 編碼時(shí)還使用了 QTranslator 類,可用于指定整個應(yīng)用軟件的 的信息文件。

使用 Qt 編寫國際化的程序,最好不要在程序中直接使用特殊編碼的文本。 比如要 編寫一中文界面的 Qt 程序,應(yīng)該在程序中使用英文,程序編寫完成后,把文本提取 出來翻譯。 這樣,程序還可以根據(jù)Locale的不同,支持多種語言。 下面介紹如何在 Qt 程序中標(biāo)注字符串,如何提取并翻譯文本。
下面是一段使用了 QObject::tr()的代碼,它建立了一個彈出菜單,菜單項(xiàng)是"Quit", 它被放置在菜單條上,在菜單條上顯示的是標(biāo)簽"File"。



QPopupMenu* popup;
popup = new QPopupMenu( this );
popup->insertItem( tr("&Quit"),qApp,SLOT(quit()) );
menubar->insertItem( tr("&File"),popup );



對于絕大多數(shù)情況,可以用上述方法處理。不過有時(shí)在定義某些變量中使用的字符 串,不能使用上述方法,但是為了讓Qt提取并翻譯該字符串,必須用某種方法標(biāo)志出 來。Qt 定義了 QT_TR_NOOP() 和 QT_TRANSLATE_NOOP() 來標(biāo)志它們。前者用于單個字符串,后者用于多個字符串。比如,



static const char* strings[] = {
QT_TR_NOOP( "Hello" ),
QT_TR_NOOP( "World" )
};



有時(shí)需要使用printf/sprintf之類的函數(shù)動態(tài)生成字符串,比如,



QStings s;
s.sprintf( "Button %d",i );
but->setText( s );


對這種使用方式的國際化是使用 arg() 函數(shù)。



QString s = tr( "Button %1" ).arg(i);
but->setText( s );



提取上述信息的方法是使用 Qt 提供的工具 findtr 命令:



findtr [filename].cpp > i18n.po


它類似于GNU的 xgettext,上述文件的提取信息文件內(nèi)包含,



....
"Content-Type: text/plain; charset=iso-8859-1\n"

#: i18n.cpp:34
msgid "ExampleWidget::&File"
msgstr ""
...



接下來是文本翻譯過程。 在Qt中翻譯信息文件時(shí)應(yīng)該注意以下事項(xiàng): (1) 提取的信息文件的編碼是iso-8859-1,在翻譯成某種語言(編碼)時(shí)應(yīng)該 注意改動它的 字符集,比如對中文GB2312和Big5編碼,應(yīng)該是, "Content-Type: text/plain; charset=gb2312\n"或者"Content-Type: text/plain; charset=big5\n"。 (2) 提取的信息有一個范圍,比如上面的文件指定的范圍是 ExampleWidget, 在翻譯 前應(yīng)該把它去掉,變成 msgid "::&File"。(3) 被翻譯的字符串可能含有加速鍵符號,如 "&File"中的"F",如果翻譯成中文最好保留該信息,它可以翻譯成 "文件(&F)"。

對于翻譯后的文件(比如上面的翻譯文件存為 i18n_gb.po),必須使用 Qt 提供的 工具 msg2qm 把它轉(zhuǎn)換為 .qm 文件才能使用,



> msg2qm i18n_gb.po i18n_gb.qm



它類似于GNU的 msgfmt 命令。翻譯后的文件可以用Qt程序直接調(diào)用。



QTranslator *translator = new QTranslator(0);
translator->load("i18n_gb.qm",".");
qApp->installTranslator(translator);



此外,Qt 還提供了類似于 msgmerge 的工具 mergetr,它用于把新提取的信息 文件和已經(jīng)翻譯過的信息文件融合起來,在此不再贅述。

在 Qt 中也可以直接使用 QTextCodec 來轉(zhuǎn)換字符串的編碼,這為在Qt下開發(fā)純 中文軟件帶來了便利條件,不過這種方法不符和國際化/本地化的習(xí)慣,



char *string = "中文和English混和字符串!"
QTextCodec* gbk_codec = QTextCodec::codecByName("GBK");
QString gbk_string = codec->toUnicode(string);
QLabel *label = new QLabel(gbk_string);



如果使程序只支持一種編碼,也可以直接把整個應(yīng)用程序的編碼設(shè)置為GBK編碼, 然后在字符串之前 加tr(QObject::tr),



qApp->setDefaultCodec( QTextCodec::codecForName("GBK") );
QLabel *label = new QLabel( tr("中文標(biāo)簽") );



如果使Qt根據(jù)Locale的環(huán)境變量取得字符集,可以使用 QString::fromLocal8Bit(str)。

本節(jié)的例子請參見 qt-i18n-example.tar.gz

2. Qt 的文本輸入
在輸入方面,Qt 的輸入條(QLineEdit)和編輯區(qū)(QMultiLineEdit)都支持 XIM,只要配合相應(yīng)的輸入服務(wù)器,便可以輸入中文/日文/韓文。目前有許多支持XIM的軟件,比如 中文: Chinput/xcin/rfinput/q9,日文: kinput2/skkinput,韓文: ami/hanIM。

Qt程序的缺省輸入風(fēng)格是OverTheSpot風(fēng)格,它也支持 OffTheSpot風(fēng)格和 Root風(fēng)格。 用戶可以在起動程序時(shí)在命令行指定輸入風(fēng)格,比如對程序app,



./app -inputstyle overthespot #缺省風(fēng)格,光標(biāo)跟隨
./app -inputstyle offthespot
./app -inputstyle root



經(jīng)過 MiziLinux 補(bǔ)丁的Qt-2.2.0 支持 OnTheSpot 輸入風(fēng)格,并且把它作為 缺省的輸 入風(fēng)格。請參見 http://www.mizi.com/ko/kde/doc/onthespot/onthespot.html。

Qt 中的任何一個 Widget 都可以接受輸入,只要它可以有鍵盤聚焦(Keyboard Focus)。所以對特殊 Widget 的輸入處理只需要截獲鍵盤輸入,獲取從XIM服務(wù)器 來的字符串。 對于OverTheSport風(fēng)格的支持,刷新XIM輸入服務(wù)器的位置即可。

3. Qt 的打印


在打印方面,XWindow下的 Qt 生成PostScript并使用lpr打印。 它含有QPrinter類, 可以方便地支持輸出頁面的控制。 對于中文打印,必須修正PostScript文件的輸出 部分。

TOpia中文化

一:字符集介紹

我國已經(jīng)頒布了多種中文信息編碼標(biāo)準(zhǔn),常用的有:GB2312-1980、GB12345、GB13000(GBK)以及最新標(biāo)準(zhǔn)GB18030,其中 GB13000是對GB2312的擴(kuò)展,又常被成為GBK,GB18030向下兼容GB2312和GBK,中文WINDOW98、中文WIN2000操作 系統(tǒng)采用的中文字符集是GB2312。

GB2312字庫僅覆蓋雙字節(jié)部分,存儲位置索引是編碼中每字節(jié)的第8bit置0得來的,如A1A1編碼漢字在字庫中的索引是2121,而非A1A1。以下是它的編碼規(guī)則:

單字節(jié):00~7F

雙字節(jié):A1~F7 A1~FE

GBK的編碼規(guī)則是:

單字節(jié):00~7F

雙字節(jié):81~FE 40~7E

80~FE

GB18030是最新的漢字編碼標(biāo)準(zhǔn),其編碼為一、二、四變長編碼:

單字節(jié):00~7F

雙字節(jié):81~FE 40~7E

80~FE

四字節(jié):81~FE 30~39 81~FE 30~39

Unicode編碼采用等長編碼,二個字節(jié)表示一個字符編碼,對于ASCII碼也采用雙字節(jié)來表示,unicode使用二維空間來描述編碼空間,平面分為256行、256列,對應(yīng)于編碼的高低字節(jié)。



二:Qt 國際化編程

在文本顯示上,Qt 使用了Unicode 作為內(nèi)部編碼,為了程序的國際化,通常我們在文本顯示的地方不直接輸入本地字符,用英文代替,比如要編寫一中文界面的 Qt 程序,應(yīng)該在程序中使用英文,程序編寫完成后,把文本提取出來翻譯。對于需要翻譯的地方,首先是在該文本處用tr()函數(shù)標(biāo)識,同時(shí)制作出.qm信息文 件,并在程序中加入QTranslator即可。比如我們在某一程序中有如下語句:

setCaption(tr(“main window”));

為了能顯示中文,有兩種方法:

方法一:

l 修改工程文件,加上TRANSLATIONS = xxx.ts

l lupdate 工程文件名

l 用linguist編輯剛生成的xxx.ts文件并保存

l lrelease 工程文件名 xxx.qm

l 在main.cpp中加入QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);

qApp->setFont(font1);

QTranslator *translator = new QTranslator(0);
translator->load("xxx.qm",".");
qApp->installTranslator(translator);
方法二:

l findtr 文件名(通常為CPP文件) > xxx.po

l 編輯po文件,其中charset需由iso-8859-1改為GB2312,然后將“main window”翻譯成“主窗口”

l msg2qm –scope zh_CN.GB2312 xxx.po xxx.qm

l 在main.cpp中加入QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);

qApp->setFont(font1);

QTranslator *translator = new QTranslator(0);
translator->load("xxx.qm",".");
qApp->installTranslator(translator);

方法三:

有時(shí)我們只是提供給本地用戶使用,無需國際化,QT提供這一支持,在QT中有許多本地字符集同unicode的轉(zhuǎn)換引擎,他們皆為QTextCodec的派生類,如QGbkCodec、QJisCodec, QHebrewCodec等。如:

QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);

qApp->setFont(font1);

QString caption=“主窗口“;

QTextCodec *gk_codec=QTextCodec::codecForName(“GBK”);

setCaption(gk_codec->toUnicode(caption));

從上面可以看出,使用轉(zhuǎn)換引擎可以輕松實(shí)現(xiàn)中文顯示,簡要步驟如下:

1:修改main.cpp文件,將字體改為unifont

QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);

qApp->setFont(font1);

2:在想漢化的內(nèi)的頭文件中加入QTextCodec指針變量和轉(zhuǎn)換函數(shù)QString mytr(char *)

#include <qtextcodec.h>

QTextCodec* gbk;

QString mytr(const char *);

3:在想漢化的類的實(shí)現(xiàn)文件中,修改類構(gòu)造函數(shù),加入:

gbk=QTextCodec::codecForName(“GBK”);

4:在想漢化的類的實(shí)現(xiàn)文件中,添加mytr函數(shù)代碼

QString Form1::mytr(const char* chars)

{

return gbk->toUnicode(chars,strlen(chars));

}

5:在想漢化的類的實(shí)現(xiàn)文件中,用“mytr”替換“tr”

2004-12-2 測試了上面的方法三,編譯通過,如果將codec成員變量改成QTextCodec派生類變量,編譯將通不過,比如將QTextCodec* gbk;改成QGbkCodec* gbk;編譯將報(bào)告此處有語法錯誤。下面是相似的用法:

1:修改***.cpp文件,在頂部加入codec頭文件

#include <qgbkcodec.h>

2:在***.h文件中,加入mytr()函數(shù)聲明

QString mytr(char* buffer,int size);

3:在***.cpp文件中,加入mytr()定義

QString mytr(char* buffer,int size)

{

QGbkCodec* gbk=QTextCodec::codeForName(“GBK”);

return gbk->toUnicode(buffer,size);

}

4:在需要顯示中文的地方,使用mytr函數(shù)即可

5:修改main.cpp文件,將字體改為unifont

QFont font1(“unifont”,16,50,FALSE,QFont::Unicode);

qApp->setFont(font1);

備注:在翻譯或轉(zhuǎn)換之前必須將Unicode字體調(diào)入,否則顯示不出中文,網(wǎng)上相關(guān)文章并未提及這一點(diǎn),如果不顯式裝載該字體,系統(tǒng)默認(rèn)的是Latin1,于是漢字顯不出來。

備注2:在編譯qt/embedded之前,必須修改qconfig-qpe.h配置文件的內(nèi)容,將與TextCodec相關(guān)的宏定義給去掉,否則QTextCodec::codecForName(“GBK”)將返回NULL指針。

備注3:使用findtr命令時(shí)可同時(shí)查找多個文件的tr(),并將查找結(jié)果都放入一個文件內(nèi),源文件以空格隔開即可,另外,生成的.po和.qm文件的文件名最好與工程文件名相同!

備注4:如果要顯示繁體中文,則需要使用QTextCodec::codecForName(“big5”)。獲取本地的使用語言,用 QTextCodec::locale(),它返回Qstring變量,通常如果是中文本地的話,通常其值為zh_CN.GB2312和 zh_TW.Big5,根據(jù)這個返回字符串,可以加載相應(yīng)的codec。如果程序只支持一種編碼,也可以直接把整個應(yīng)用程序的編碼設(shè)置為一個默認(rèn)的編碼標(biāo) 準(zhǔn),比如系統(tǒng)只需要顯示中文和英文,則可以直接設(shè)置應(yīng)用程序的默認(rèn)編碼標(biāo)準(zhǔn)是GBK,如下使用方法:

qApp->setDefaultCodec( QTextCodec::codecForName("GBK") );

QLabel *label = new QLabel( tr("中文標(biāo)簽") );

備注5:如果使用本地的字符轉(zhuǎn)換器,可以使用Qstring的靜態(tài)函數(shù)Qstring::fromLocal8Bit(char* buffer,int size),將本地字符串轉(zhuǎn)換成UNICODE字符串,不過要設(shè)置好LANGUAGE環(huán)境變量。



三:QTOpia中文化

l findtr 文件名 > xxx.po

l 編輯xxx.po文件

l msg2qm –scope zh_CN.GB2312 xxx.po xxx.qm

l 拷貝可執(zhí)行文件到QPEDIR/bin目錄

l 拷貝xxx.po和xxx.qm文件到QPEDIR/i18n/zh_CN目錄

l 進(jìn)入QPEDIR/apps/Applications目錄創(chuàng)建一新.desktop文件

l iconv –f utf8 –t GB18030 xxx.desktop > xxx1.desktop

l 編輯xxx1.desktop文件,主要是修改Exec、Icon、Name和Name[zh_CN]四項(xiàng)

l iconv –f GB18030 –t utf8 xxx1.desktop > xxx.desktop

l rm –f xxx1.desktop

l qvfb –depth 16 &

l cd $QPEDIR/bin

l ./qpe

備注:如果你的系統(tǒng)中有多個qtopia版本,要特別注意QTDIR、QPEDIR、LD_LIBRARY_PATH環(huán)境變量

備注2:可按照此方法漢化qtopia自帶的應(yīng)用程序

備注3:po文件是中間文件,程序真正需要的是qm文件。iconv是系統(tǒng)自帶的內(nèi)碼轉(zhuǎn)換工具,它能將utf8編碼的文件轉(zhuǎn)換成gb18030編碼的文 件,反之也能,轉(zhuǎn)換這一步必不可少,因?yàn)閐esktop文件缺省是utf8編碼的,而我們的redhat linux 7。3中文操作系統(tǒng)用的卻是gb18030,所以在編輯器打開前需轉(zhuǎn)換。



四:漢化qtopia-1.5.0 for Arm

首先按照“三”的方法對要漢化的程序提取*.qm文件和*.desktop桌面配置文件,在做完這一步后,將*.qm文件down到目標(biāo)機(jī)的 /opt/qtopia-free-1.5.0.arm/i18n/zh_CN目錄下,同時(shí)將*.desktop文件覆蓋/opt/qtopia- free-1.5.0.arm/apps目錄下的相應(yīng)文件,目標(biāo)機(jī)的環(huán)境變量配置如下:

export QTDIR=/opt/qt-2.3.3.arm

export QPEDIR=/opt/qtopia-free-1.5.0.arm

export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

export PATH=$QPEDIR/bin:$PATH

export LANG=zh_CN

開機(jī)啟動,由于設(shè)置的語言為簡體中文,qpe會自動為每個應(yīng)用加載Unifont字體,以及簡體中文目錄下的翻譯文件,因而顯示出中文,翻譯文件是一個方 面,但更關(guān)鍵的是要顯示中文必須有中文字體來支持,Unifont字體包含中文字,因而能顯示中文,沒有相應(yīng)字體的支持,光有翻譯文件是顯示不出中文的!

在經(jīng)過以上的步驟后,有的應(yīng)用在顯示上依然會顯示方框,這多半是由于該窗體相關(guān)的字體可能不是支持中文的字體,這需要直接修改源代碼,以下是在漢化qtopia-free-1.5.0.arm的過程中的相關(guān)記錄:

1. 在編譯qtopia的過程中,可能會報(bào)告找不到SetButtonGroupID()函數(shù),編譯通不過。這是由于庫中并沒有該函數(shù),一般情況下將該語句隱 藏掉,原代碼的原意是設(shè)置Button按鈕在ButtonGroup組的序號,隱藏該語句對應(yīng)用無影響。出現(xiàn)這個問題,主要在 /netsetup/dialup/dialupbase.cpp文件和/taskbar/shutdown.cpp文件,shutdown.cpp文件 的相應(yīng)行號是:96、149、201、253行。

2. 修改mpegplayer/playlistwidget.cpp文件的143行和166行,將字體設(shè)置改為Unifont,如下:Qfont(“unifont”,16,50,FALSE,QFont::Unicode)或者去掉該語句

3. 修改snake/interface.cpp的87行和186行,將字體設(shè)置改為Unifont,如下:Qfont(“unifont”,16,50,FALSE,QFont::Unicode)或者去掉該語句

4. 修改qasteroids/view.cpp的104行和qasteroids/toplevel.cpp的109行和165行,將字體設(shè)置改為 Unifont,如下:Qfont(“unifont”,16,50,FALSE,QFont::Unicode)或者去掉該語句

5. 修改sysinfo/versioninfo.cpp文件,將61行的builder改為作者本人,將50行的v改為tr(“corpname”),重新建立po文件,并翻譯corpname為國營789北京開發(fā)部,使用msg2qm生成qm文件

6. 修改桌面,位于taskbar目錄下,生成libqpe.po和libqpe.qm文件,并將libqpe.qm文件拷貝到i18n/zh_CN目錄下



五:qtopia目錄結(jié)構(gòu)

apps/Applications:應(yīng)用程序桌面配置文件

apps/Games:游戲桌面配置文件

apps/Settings:系統(tǒng)設(shè)置桌面配置文件

bin:二進(jìn)制可執(zhí)行文件

configs:編譯配置文件目錄

doc和docs:qtopia的參考文檔

etc:應(yīng)用配置文件目錄

i18n:國際化目錄

i18n/zh_CN:簡體中文目錄

include/qpe:與qtopia相關(guān)的頭文件目錄

inputmethods:輸入法

library:qtopia部分源代碼目錄

pics:與應(yīng)用相關(guān)的圖片存放目錄

plugins:各種插件目錄,如mpeg3解碼插件、輸入法插件等

sounds:音頻文件存放目錄

taskbar:桌面程序的源代碼(qpe的源代碼)





文件修改記錄:

1:創(chuàng)建于2003/6/9

2:于2003/8/21添加實(shí)現(xiàn)中文顯示的第三種方法部分

3:于2004-1-18添加文章的“四”內(nèi)容,一個漢化qtopia for arm的實(shí)例,以及“五”。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
嵌入式 QT GUI 編譯環(huán)境搭建全過程
Qt/x11 Qt/Embedded Qtopia關(guān)系和安裝
Qt Embedded開發(fā)環(huán)境搭建----詳解 - 筆記 - 張軍 - CSDN學(xué)生大本營...
QT QTOPIA在linux上的移植 Linuxext 幫助Linux愛好者??! - www.linuxext.com
QTE 交叉編譯(PC部分)
Qt
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服