QT完全手冊全文_第1頁
QT完全手冊全文_第2頁
QT完全手冊全文_第3頁
QT完全手冊全文_第4頁
QT完全手冊全文_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

QT完全手冊

嵌入式工具Qt的安裝與運(yùn)用

摘要

Qt是Trolltech公司的一個(gè)產(chǎn)品。Trolltech是挪威的一家軟件公司,主要開發(fā)兩種產(chǎn)品:一種是跨平臺應(yīng)用程序界面

框架:另外一種就是供應(yīng)應(yīng)做嵌入式Linux開發(fā)的應(yīng)用程序平臺,能夠應(yīng)用到PDA和各種移動(dòng)設(shè)備上.Qt和Qtopia分別

是其中具有代表性的兩個(gè)。(2023-05-0510:52:14)

Bylanfz出處:://tech.ccidnet/pub/article/c310_a71173_pl.html

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

Qt是Trolltech公司的一個(gè)產(chǎn)品。Trolltech是挪威的一家軟件公司,主要開發(fā)兩種產(chǎn)品:一種是跨平臺應(yīng)用程序界面

框架:另外一種就是供應(yīng)應(yīng)做嵌入式Linux開發(fā)的應(yīng)用程序平臺,能夠應(yīng)用到PDA和各種移動(dòng)設(shè)備上。Qt和Qtopia分別

是其中具有代表性的兩個(gè)。

Qt是一個(gè)多平臺的C++圖形用戶界面應(yīng)用程序框架,它能給用戶供應(yīng)精致的圖形用戶界面所須要的全部元素,而且它是基

于一種面對對象的思想,所以用戶對其對象的擴(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/V/indows95、Windows98、WindowsNT4.0、Windows2000、WindowsXP;

?Unix/XllLinux.SunSolaris.HP-UX、CompaqTrue64Unix,IBMAIX.SGIIRIX和很多其它Xll平臺:

?Macintosh!MacOSX;

?Embedded帶FramBufferLinux平臺。

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

Qt和Qtopia的安裝

假如須要安裝一個(gè)帶FramBu"er的Qtopia平臺,須要有以下軟件(所列舉軟件以篤者運(yùn)用的為例):

?:

?Tmake1.11;

?(Qtopia1.6.0是基于該開發(fā)平臺上開發(fā)的):

?Qt/Embedded2.3.2forXI1;

?Qt3.1.2forXII。

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

Qtopia平臺安裝分為以下幾個(gè)步腺:

1.解包Qtopia

在Linux吩咐模式下運(yùn)行以下吩咐:

tarxfzqtopia-source-1.6.0(解包)

cdqtcpia-source-1.6.0

exportQPEDIR=$PWD(設(shè)置環(huán)境變量)

cd..

2.安裝“make

在Linux吩咐模式下運(yùn)行以下吩咐:

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吩咐模式下運(yùn)行以下吩咐:

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的參數(shù)中添加一system-jpeg和gif,使Qtopia平臺能支持jpeg、gif格式的圖形。

4.安裟Qt/Xll2.3.2

在Linux吩咐模式下運(yùn)行以下吩咐:

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..

依據(jù)開發(fā)者本身的開發(fā)環(huán)境,也可以在configure的參數(shù)中添加別的參數(shù),比如-no-opengl或?no?xfs,可以鍵入./configure

-help來獲得一些幫助信息。

5.安裟Qt/Xll3.1.2

在Linux吩咐模式下運(yùn)行以下吩咐:

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吩咐模式下運(yùn)行以下吩咐:

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的運(yùn)用

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

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

Qtopia,在圖形模式卜.運(yùn)行吩咐:

exportQTDIR=$QTEDIR,

qpe&;

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

Qt/Embedded是針對嵌入式Linux而開發(fā)的?種開發(fā)工具,Qt封裝了一些常用的類,而且這些類的名字都以Q字開頭命

名,如QString、QDialog等。這里主要介紹一下如何利用QtDesigner來設(shè)計(jì)組件,并生成相應(yīng)的代碼。

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

組成。

Qt中有三個(gè)主要的基類:QObject,Qapplication和QWidgeto

在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)系,一個(gè)Signal

可以發(fā)給多個(gè)Slot,Slot也可以接收多個(gè)Signal。Slot除了可以接收Signal以外,與其它的成員函數(shù)沒有區(qū)分。這種機(jī)

制比運(yùn)用回調(diào)函數(shù)要敏捷,但是會(huì)減慢程序的運(yùn)行速度。不過在現(xiàn)在高速CPU的面前,這種損失是無足輕重的,而且它還能

保證程序的簡明性和敏捷性,特別便利。

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

要將組件組合起來,最簡潔的方法就是運(yùn)用QtDesigner。首先要啟動(dòng)QtDesigner,在Linux吩咐模式下,鍵入以下吩咐

(假設(shè)Qt安裝在/usr/local下):

cdqt-2.3.2/bin

./designer

這樣就可以啟動(dòng)一個(gè)與Windows下的Delphi相類似的如圖1的界面。

然后新建個(gè)QFrame,將自己須要的組件干骯拖拉到這個(gè)Frame中,信任很多人都有過這樣的經(jīng)驗(yàn),此處就不再具體描

述了。完成之后存盤時(shí),會(huì)將這個(gè)新的組件保存為一個(gè)擴(kuò)展名為.5的文件。假設(shè)所存的文件名為test.ui,用vitest.ui來

查看這個(gè)文件,發(fā)覺這是一個(gè)用xml語言寫的一個(gè)文本。下面用這個(gè)test.ui生成相應(yīng)的test.h和test.cpp。同樣還是在

這個(gè)書目下,可以看到一個(gè)uic的工具,這個(gè)是Qt特地用來將ui文件生成.h和.cpp文件的,在終端模式卜.鍵入以卜吩咐:

./uic-otest.htest.ui

./uic-otest.h-itest.cpptest.ui

此時(shí)就能看到生成了相應(yīng)test.h和test.cpp,這是一個(gè)類。當(dāng)然這只是一些表面的東西,還須要在這些代碼中添加相應(yīng)的

Signal和Slot,完成所須要的操作。值得留意的是,相應(yīng)版本生成的ui最好用相應(yīng)版本的uic來生成代碼。假如用Qt3.1.2

的Designer生成的ui,用Qt2.3.2的uic來生成代碼,生成的代碼都會(huì)是一些空函數(shù)。

在一般的開發(fā)過程中,首先通過這個(gè)ui生成的一個(gè)類,在Qt中通常叫做Base,如上面的例子,叫做testBase:然后再新

建一個(gè)類,來繼承這個(gè)Base。通常叫做實(shí)現(xiàn)類[mpl,如testlmpL在這個(gè)實(shí)現(xiàn)類里面定義所須要的成員函數(shù)、Signal和

Slot,因?yàn)閡i可能是常常須要改動(dòng)的。假如這樣做,每次只須要在Designer中修改ui,而不用去理睬這些成員函數(shù)、Signal

和Slot了。

編譯一個(gè)Qt程序必定須要Makefile,在Qt中供應(yīng)了一個(gè)特地生成Makefile的工具,就是tmake。用tmake須要依據(jù)編

寫的程序?qū)懸粋€(gè).pro文件。.pro文件特別簡潔,有固定的格式,下面是一個(gè)例子:

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

生成這個(gè).pro文件之后,在終端中鍵入下面的啖咐:

tmake-oMakefile

就自動(dòng)生成了一個(gè)Makefile,運(yùn)用這個(gè)Makefie編譯所編寫的程序就可以九

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

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

(這些軟件可以免費(fèi)從trolltech的WEB或FTP服務(wù)器上下載)

?tmake1.11或更高版本:(生成Qt/Embedded應(yīng)用工程的Makefile文件)

?Qt/Embedded2.3.7(Qt/Embedded安裝包)

?Qt2.3.2forXII;(Qt的XII版的安裝包,它將產(chǎn)生xll開發(fā)環(huán)境所須要的兩個(gè)工具)

1、安裝tmake

在Linux吩咐模式下運(yùn)行以下吩咐:

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吩咐模式下運(yùn)行以下吩咐:

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嵌入式開發(fā)包生

成虛擬緩沖幀工具qvfb,并支持4,8,16,32位的顯示顏色深度。另外我們也可以在

configure的參數(shù)中添加一system-jpeg和gif,使Qt/Embedded平臺能支持jpeg、gif

格式的圖形。

上述吩咐m(xù)akesub-src指定按精簡方式編譯開發(fā)包,也就是說有些Qt類未被編

譯。Qt嵌入式開發(fā)包有5種編譯范圍的選項(xiàng),運(yùn)用這些選項(xiàng),可限制Qt生成的庫文件的大

小,但是您的應(yīng)用所運(yùn)用到的一些Qt類將可能因此在Qt的庫中找不到鏈接。編譯選項(xiàng)的具

體用法可運(yùn)行./configure-help吩咐查看。

3.安裝Qt/Xll2.3.2

在Linux吩咐模式下運(yùn)行以下吩咐:

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..

依據(jù)開發(fā)者本身的開發(fā)環(huán)境,也可以在configu?e的參數(shù)中添加別的參數(shù),比如

-no-opengl或?no-xfs,可以鍵入./configure-help來獲得一些都助信息。

假如Qt/Embedded的應(yīng)用是在UNIX平臺下開發(fā)的話,那么它就可以在開發(fā)的機(jī)器

上以一個(gè)獨(dú)立的限制臺或者虛擬緩沖幀的方式來運(yùn)行,對于后者來說,其實(shí)是有一個(gè)XII

的應(yīng)用程序虛擬了一個(gè)緩沖幀。通過指定顯示設(shè)備的寬度,高度和顏色深度,虛擬出來

的緩沖幀將和物理的顯示設(shè)備在每個(gè)像素,保持一樣。這樣每次調(diào)試應(yīng)用時(shí)開發(fā)人員就

不用總是刷新嵌入式設(shè)備的FLASH存儲(chǔ)空間,從而加速了應(yīng)用的編譯、鏈接和運(yùn)行周期。

運(yùn)行Qt的虛擬緩沖幀工具的方法是:在Linux的圖形模式卜.運(yùn)行吩咐:

qvfb(回車)

當(dāng)Qt嵌入式的應(yīng)用程序要把顯示結(jié)果輸出到虛擬緩沖幀時(shí),我們在吩咐行運(yùn)行這

個(gè)程序時(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。。版本(或更低版本)下安裝,否則安

裝不勝利。

QT/E安裝過程困難,具體細(xì)微環(huán)節(jié)可以參考下面這篇文章?!禥t/Embedded開發(fā)環(huán)境建立的過程》

此文在網(wǎng)上可搜尋到。

本機(jī)下虛擬機(jī)中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之間的區(qū)分

相對來說QT與QT/E的語法一樣,所不同之處在庫類大小或者庫類函數(shù)大小不同而已。QT/E相對于QT來說,不具有少數(shù)

類或者少數(shù)函數(shù)的支持。具體QT/E是否包含某個(gè)類或者包含某個(gè)類中的函數(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/ELIB環(huán)境,具體方法如下:

[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工具設(shè)計(jì)的界面(后面有講),則要將*.ui文件轉(zhuǎn)換成*.h文件和*.cpp文件。轉(zhuǎn)換方法如下:

uic-otest.htest.ui

uic-otest.cpp-itest.htest.ui

3.編寫一個(gè)十.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編譯生成可執(zhí)行文件

make

6打開CVFB

進(jìn)入安裝QT/X11所在書目,在BIN書目下執(zhí)行程序qvfb。

有時(shí)候須要修改qvfb執(zhí)行時(shí)的deptb參數(shù)才能夠執(zhí)行QT/E程序??梢愿纱嘣赒VFB打開窗口的Configure彩單項(xiàng)中選擇,

也可以用如下吩咐執(zhí)行QVFBo

./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

供應(yīng)designer工具和qvfb工具的。

Designer可以用來設(shè)計(jì)圖形界面,最終生成.ui文件,可通過UIC吩咐轉(zhuǎn)換為相應(yīng)的C++文件。

QVFB模擬幀緩沖,供應(yīng)QT/E程序的顯示平臺。

五.QT/I=程序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的一些參考資料:

QT中文論壇

(關(guān)于QT3的類,以及類函數(shù)可以在這找尋)

供應(yīng)QT3編程最好書籍的電子版本《C++GUIProgrammingwithQT3》(本機(jī))

關(guān)于QT4可以參考QTASSISTNAT(本機(jī)中),另外QTASSISTNAT中也可以查找QT3的類及庫等。

設(shè)置Qtopia的build環(huán)境

1、環(huán)境變量

在目標(biāo)系統(tǒng)上buildQtopia必需設(shè)定必要的環(huán)境變量,如QTDIR,假如依靠多個(gè)版本的Qt,則須要用環(huán)境變量指向用到

的庫配置。

一種方法是將環(huán)境變量的設(shè)定寫入文件,通過運(yùn)行source吩咐應(yīng)用文件的內(nèi)容。

舉例說明:

Linux/bash下建立環(huán)境變量設(shè)定文件qtopia.sh,內(nèi)容如下:

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

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

另外也可以通過在.bash"文件中設(shè)定別名來應(yīng)用這些環(huán)境變量。假設(shè)環(huán)境變量設(shè)置文件存放在home書目的bin下,則

可在.bashrc中加入:

aliasqtc?pia='source~/bin/qtopia.sh'

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

整個(gè)Qtopia系統(tǒng)在build過程中須要三個(gè)獨(dú)立的配置系統(tǒng):

1)Qt/Ernbedded配置文件

2)tmake-用于buildQtopia1.x和一些第三方軟件

3)qmake-用于buildQtopia2及以上版本

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

下面是創(chuàng)建一個(gè)''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成適合系統(tǒng)的內(nèi)容,如:

可能須要修改SYSCONF_CXX,SYSCONF_CC和SYSCONF_UNK,指定正確的編譯器.可能須要增加編譯選項(xiàng)

-DMYARM,在代碼中增加宏#1£<^MYARM(用以增加設(shè)備相關(guān)的代碼)

tmake

編輯$TMAKEDIR/lib/qws/linux-myarm-g++/tmake.conf,修改用到的utilites和flags:

可能須要修改TMAKE_CC,TMAKE_CXX和TMAKEJJNK

可能須要增加-DMYARM選項(xiàng)

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)

可用于書目名的字符

正則表達(dá)式字符

Qtopia1.9.x和Qtopia2.0.02.1.0對字符有以下的耍求;

Qtopiabuild系統(tǒng)訪問到的任何書目都不能包含正則表達(dá)式字符

任何能被QRegExp識別的特殊字符和字符序列都可能引起問題

字符只匹配自身

不要將正則表達(dá)式字符用于書目名,包括(但不僅限于):+.?*\()口人${}

注:Qtopia2.1.0和2.1.1及以上版本可以通過應(yīng)用patch解除以上的限制

空格

Qtopiabuild系統(tǒng)不支持書目名中包含空格。

必需保證:

build系統(tǒng)訪問到的書目不包含空格

訪問書目的各層上級書目也不包含空格

Qtopia的依靠和必要條件

簡介

為了使Qtopia正確運(yùn)行,必需滿意以下的必要條件:

安裝適當(dāng)?shù)木幾g/交叉編譯工具

Qt/Embedded-2.3.11

Linuxkernel供應(yīng)共享內(nèi)存、mmap和socket支持

Linux支持framebuffer

Linux支持OSS聲音或支持與OSS兼容的ALSA聲音。進(jìn)一步的信息參考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將這個(gè)值設(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,幾乎可以確定必定會(huì)損失音頻質(zhì)量。

Video4Linux

Camera應(yīng)用程序須要支持Video4Linuxvl的內(nèi)核,Qtopia沒有供應(yīng)當(dāng)支持。

請參考正式的VideoforLinux資源站點(diǎn),參看API的具體內(nèi)容。

zlib

zlib可以從下載

libuuid(akaluuid)

Qtopia不供應(yīng)uuid支持。這個(gè)庫可以從站點(diǎn)下載

另外,假如你有SuSELinux的發(fā)行版,e2fsprogs-devel這個(gè)包可以供應(yīng)uuid支持;在Debian中對應(yīng)的包是uuid-dev.

這個(gè)庫應(yīng)當(dāng)放在標(biāo)準(zhǔn)路經(jīng)下/usr/lib/libuuid.so

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

rpm-qa|grepe2fsprogs

假如尚未安裝,請從安裝盤或鏡像站安裝這個(gè)包。

須要留意的是,假如沒有安裝e2fsprogs-devel,在鏈接時(shí)會(huì)發(fā)生下面的錯(cuò)誤:

/usr/lib/gcc-lib/i586-suse-Linux/3.3.3/../../../../i586-suse-linux/bin/ld:

cannotfind-luuid

假如安裝了該庫仍遇到上述錯(cuò)誤,則檢杳Qtopia的configure腳本的-L和-R參數(shù),以確定腳本包含了庫的實(shí)際路徑。關(guān)

于交叉編譯的信息可參考SystemIntegrator'sGuide.

libjpeg

Qtopia不供應(yīng)jpeg庫。Qtopia須要Qt/Embedded配置為支持jpeg.

libjpeg庫可從下載

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

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

rpm-qa|greplibjpeg

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

關(guān)于libjpeg交叉編譯的信息,可參考SystemIntegrator'sGuide.

xorg或Xll

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

相關(guān)探討

確定起先Qtopia須要的步驟,參考:Gettingstarted

將Qtopia集成到特定設(shè)備上的重點(diǎn)步驟,參考:SystemIntegrator'sguide

Qtopia的FAQs,參看:Qtopiaindexpage

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

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

主機(jī)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(因?yàn)榻鈮汉蟮膓t-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==>>我都是這樣創(chuàng)建.pro文件的

$tmake-oMakefile

$make

$qvfb&

$./hello-qws或者$qpe

還沒怎么細(xì)致探討過。

目標(biāo)機(jī)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里面包含這個(gè)庫:如沒有可以上網(wǎng)下載。

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

(還要多謝這里面的大哥呀,好不簡潔才在網(wǎng)上找到的)

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環(huán)境下qt中文化程序設(shè)計(jì)

原文出處:Linux公社

原文作者:yfyOOl

kdevelop是一款在linux平臺下可以同windows環(huán)境下的vc相媲美的集成開發(fā)環(huán)境,qt則是一款支持包括windows和

linux平臺

的GUI庫,可以說它是linux下的MFC.在顯示上,qt運(yùn)用Unicode作為內(nèi)部編碼,可以支持多種編碼,如何運(yùn)用qt進(jìn)行國際

化編程

在網(wǎng)上可以找到很多資料的,但都是針對較早版本的qt進(jìn)行介紹的.qt3.0.5中對這些作了些改動(dòng),這些方法就相應(yīng)的要做些改

動(dòng).

而且在kdevelop中開發(fā)qt應(yīng)用程序,將會(huì)事半功倍,我的開發(fā)環(huán)境為redhat8.0(需安裝kde開發(fā)工具包).

首先在linux中打開kdevelop集成開發(fā)環(huán)境,用它的應(yīng)用程序向?qū)陆?個(gè)qt的SDI的應(yīng)用程序框架.這個(gè)同windows下

vc很類似.它

將會(huì)為你自動(dòng)生成版本號,作者,e-mail等信息的單文檔對話框的應(yīng)用程序框架.我們首先對它自動(dòng)生成的程序進(jìn)行漢化(qtl

我的項(xiàng)目名稱).

1.漢化自動(dòng)生成的程序

添加翻譯文件

在“項(xiàng)目”菜單中選擇“添加新的翻譯文件”,語言選擇"zh_CN.Gb2312”.將會(huì)創(chuàng)建個(gè)zh_CN.GB2312字符編碼的翻譯文

件.擴(kuò)展名

為".ts".在qt3.0.5環(huán)境下,打開"*.ts”翻譯文件的工具是linguist.你可以在“工具“菜單中選擇"QT

linguist”來打開,在linguist菜單中選擇"file"->"open”打開所要翻譯的翻譯文件.此時(shí)可以在linguist窗口中的source

text中

的文木就是你所要翻譯的文本,選擇所要翻譯的文本,在下方有一個(gè)類似一頁紙一樣的地方,在translate下輸入翻譯后的文本.

所示.

翻譯完這些文件后,編譯運(yùn)行,在我們的程序里并不能顯示中文,還是英文,我們還須要做的就是用Irelease吩咐將翻譯后的文

件轉(zhuǎn)換

成文件才可以運(yùn)用.在限制臺下進(jìn)入你用kdevelop所生成的應(yīng)用程序書目.

>lreleaseMakefile.am

qt3.0.5用這個(gè)兩個(gè)程序取代了以前版本的findtr和msg2qm吩咐.在kdevelop集成環(huán)境中打開main.cpp主函數(shù),

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,);

是依據(jù)客戶環(huán)境的來載入當(dāng)前書目下相應(yīng)的翻譯文件的中文環(huán)境默認(rèn)的為

locale.redhatlocalegbl8030z

此處要么把翻譯文件名由qtl.zh_CN.GB2312.qm改為qtl.zh_CN.GB18030.qm,要么將這句改為

tor.load;QString("qtl.zh_CN.GB2312"),1'Z);

不過為了國際化編程的須要,建議采納第一種方法,更改后編譯運(yùn)行,你會(huì)發(fā)覺你的程序已經(jīng)是中文界面的了.

2.漢化自己的對話框

大多數(shù)狀況下我們都須要自己來設(shè)計(jì)對話框,qt為我們供應(yīng)了特別好的對話框編輯器QtDesigner,可以很便利的設(shè)計(jì)我們的

對話框,qt

的信號和槽等,關(guān)于QtDesigner的運(yùn)用,限于篇幅,不再贅述.以前面的程序?yàn)榛A(chǔ).在kdevelop中選擇"文件新建",選擇

Qt

Designer文件(*.ui).在文件名一欄中填寫"mydialog",最終點(diǎn)擊確定按鈕,即會(huì)啟動(dòng)QtDesigner,此處只拖了一個(gè)Label,

寫了一

些英文字符,對話框的name屬性為Forml.將對話框mydialog.ui保存.

在限制臺下進(jìn)入你用kdevelop所生成的應(yīng)用程序書目.

>lupdateMakefile.am

同樣用"QT

linguist"來翻譯qtl.zh_CN.GB2312.tr文件.比時(shí)linguist的context中會(huì)多出Forml的選項(xiàng),這里面就是我們新建的對

話框要翻譯的

選項(xiàng).依據(jù)前面的方法進(jìn)行漢化.

>lreleaseMakefile.am

生成qtl.zh_CN.GB2312.qm文件.

編譯將會(huì)生成mydialog.cppmydialog.hmydialog.moc文件.然后將main.cpp中的

QtlApp*qtl=newQtlApp。;改為

Forml*qtl=newForml();

并將"mydialog.h"#include

進(jìn)去.依據(jù)前面的方法更改tor.load中加載的翻譯文件.編譯運(yùn)行,你的對話框也是中文的了.

3.其它的一些說明

由于qt返回的是Unicode編碼,譬如你在LineEdit中干脆輸入中文,返回的就是??,qt中可以干脆運(yùn)用QTextCodec來轉(zhuǎn)換

字符串的編碼.

QStringstring;

string=LineEditl->text();〃取得LineEditl返回的文字

QTextCodec*codec=QTextCodec::codecForName("GBK");

〃轉(zhuǎn)換編碼

QCString

chinese__string=codec->fromUnicode(string);//niQCString來存儲(chǔ)返回的多字節(jié)編碼

當(dāng)然,你在頭文件中就必需加入

#incltde<qtextcodec.h>

#inclLde<qstring.h>

#inc幾de<qcstring.h>

4.QTextStream對中文的支持

QTextCodec*codec=QTextCodec::codecForName("GBK");/*當(dāng)前編碼為"GBK"*/

QTextStreammystream(&file);

fiiyblredm.bt:LCudec(cudec);

5.QCSt-ing&QString

QCString中不以unicode編碼

QString以unicode為編碼.

qt內(nèi)部運(yùn)用unicode為編碼,所以假如要在qt的部件如multilineedit中顯示中文,則須要將非unicode的字符轉(zhuǎn)換成

unicode字符.

QCStringlocallyEncoded="中國人不是東亞病夫";〃texttoconvert

QTextCodec*codec=QTextCodec::codecForName("GBK");//getthecodecforGBK

QStringunicodeString=codec->toUnicode(locallyEncoded);

Qt國際化編程

內(nèi)容:

1.Qt的文本顯示

2.Qt的文本輸入

3.Qt的打印

對本文的評價(jià)

訂閱:

developerWorks時(shí)事通訊

于明儉

2023年1月09日

本篇探討Qt庫對國際化的支持,將介紹Qt對文本顯示,輸入和打印的支持,和如何之用Qt開發(fā)國際化的軟件。

Qt目前的版本(2.2.4)對國際化的支持已經(jīng)相當(dāng)完善。在文本顯示_L,Qt運(yùn)用了Unicode作為內(nèi)部編碼,可以同時(shí)支持

多種編碼。為Qt增加一種編碼的支持也比較便利,只要增加該編碼和Unicode的轉(zhuǎn)換編碼便可以了。Qt目前支持ISO

標(biāo)準(zhǔn)編碼ISO8859-1,ISO8859-2,ISO8859-3,ISO8859-4,ISO8859-5,ISO8859-7,ISO8859-9,和ISO

8859-15(對于阿拉伯語和希伯來語的支持正在開發(fā)之中),中文GBK/Big5,日文eucJP/JIS/ShiftJIS,韓文eucKR,俄

文K018-Ro當(dāng)然也可以干脆運(yùn)用UTF8編碼。

Qt運(yùn)用了自己定義的Locale機(jī)制,在編碼支持和信息文件(MessageFile)的翻譯上彌補(bǔ)了目前Unix上所普遍采納Locale

和gettext的不足之處。Qt的這種機(jī)制可以使Qt的同一組件(QWidget)上同時(shí)顯示不同編碼的文本。比如,Qt的標(biāo)

簽上可以同時(shí)運(yùn)用中文簡體和中文繁體文本。

在文本輸入上,Qt采納了XIM(XInputMethod)標(biāo)準(zhǔn)協(xié)議,可以干脆運(yùn)用XIM輸入服務(wù)器。由于目前的絕大多數(shù)輸入服

務(wù)器都是針對單一語言的,所以在Qt的標(biāo)準(zhǔn)輸入組件(QLineEdit,QMultiLineEdit)中的輸入受到單一編碼的限制,Qt還

不支持動(dòng)態(tài)切換編碼輸入的支持,這是它的不足之處。

1.Qt的文本顯示

像般的國際化過程一樣,Qt運(yùn)用了類似GNUgettext-樣的函數(shù)QObject::tr(),它用于從Qt的信息文件.qm中

取出信息,這些信息是經(jīng)過Qt的工具處理的。Qt在處理編碼時(shí)還運(yùn)用了QTranslator類,可用于指定整個(gè)應(yīng)用軟件的

的信息文件。

運(yùn)用Qt編寫國際化的程序,最好不要在程序中干脆運(yùn)用特殊編碼的文本。比如要編寫一中文界面的Qt程序,應(yīng)當(dāng)在程

序中運(yùn)用英文,程序編寫完成后,把文本提取出來翻譯。這樣,程序還可以依據(jù)Locale的不同,支持多種語言。下面介

紹如何在Qt程序中標(biāo)注字符串,如何提取并翻譯文本。

下面是?段運(yùn)用了QObject::"。的代碼,它建立了一個(gè)彈出菜單,菜單項(xiàng)是"Quit",它被放置在菜單條上,在菜單條上

顯示的是標(biāo)簽"File"。

QPopupMenu*popup;

popup=:newQPopupMenu(this);

popup->insertltem(tr("&Quit"),qApp.SLOT(quit()));

menubar->lnsertitem(tr("&Flle"),popup);

對于絕大多數(shù)狀況,可以用上述方法處理。不過有時(shí)在定義某些變量中運(yùn)用的字符串,不能運(yùn)用上述方法,但是為了讓Qt

提取并翻譯該字符串,必需用某種方法標(biāo)記出來。Qt定義了QT_TR_NOOP()和QT_TRANSLATE_NOOP()來標(biāo)記它

們。前者用于單個(gè)字符串,后者用于多個(gè)字符串。比如,

staticconstchar*strings[]={

QT_TR_NOOP("Hello"),

QT_TR_NOOP("World")

};

有時(shí)須要運(yùn)用printf/sprintf之類的函數(shù)動(dòng)態(tài)生成字符串,比如,

QStingss;

s.sprintf("Button%d",i);

but->setText(s);

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

QStrings=tr("Button%1").arg(i);

but->setText(s);

提取上述信息的方法是運(yùn)用Qt供應(yīng)的工具findtr吩咐:

findtr[filename].cpp>il8n.po

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

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

#:il8n.cpp:34

msgid"lExampleWidget::&File"

msgstr,,w

接下來是文本翻譯過程。在Qt中翻譯信息文件時(shí)應(yīng)當(dāng)留意以下事項(xiàng):(1)提取的信息文件的編碼是iso-8859-l,在翻譯

成某種語言(編碼)時(shí)應(yīng)當(dāng)留意改動(dòng)它的字符集,比如對中文GB2312和Big5編碼,應(yīng)當(dāng)是,"Content-Type:text/plain;

charset==gb2312\n"^ifi"Content-Type;text/plain;charset=big5\n"^(2)提取的信息有一,個(gè)范圍,比如_L面的文

件指定的范圍是ExampleWidget,在翻譯前應(yīng)當(dāng)把它去掉,變成msgid"::&File"o(3)被翻譯的字符串可能含有加速

鍵符號,如"&File“中的“F",假如翻譯成中文最好保留該信息,它可以翻譯成"文件(&F),

對于翻譯后的文件(比如上面的翻譯文件存為il3n_gb.po),必需運(yùn)用Qt供應(yīng)的工具msg2qm把它轉(zhuǎn)換為,qm文件

才能運(yùn)用,

>msg2qmil8n_gb.poil8n_gb.qm

它類似于GNU的msgfmt吩咐。翻譯后的文件可以用Qt程序干脆調(diào)用。

QTranslator*translator=newQTranslatcr(O);

translator->load("il8n_gb.qmH,

qApp->instal!Translator(translator);

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

在此不再贅述。

在Qt中也可以干脆運(yùn)用QTextCodec來轉(zhuǎn)換字符串的編碼,這為在Qt下開發(fā)純中文軟件帶來了便利條件,不過這種方

法不符和國際化/本地化的習(xí)慣,

char*string="中文和English混和字符串!”

QTextCodec*gbk_codec=QTextCodec::codecByName("GBK");

QStringgbk_string=codec->toUnicode(string);

QLabel:klabel=newQLabel(gbk_string);

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

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

QLabel*label=newQLabel(。("中文標(biāo)簽"));

假如使Qt依據(jù)Locale的環(huán)境變量取得字符集,可以運(yùn)用QString::fromLocal8Bit(str)<.

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

2.Qt的文本輸入

在輸入方面,Qt的輸入條(QLineEdit)和編輯區(qū)(QMultiLineEdit)都支持XIM,只要協(xié)作相應(yīng)的輸入服務(wù)器,便可以輸入

中文/日文/韓文。目前有很多支持XIM的軟件,比如中文:Chinput/xcin/rfinput/q9,日文:kinput2/skkinput,韓文:

ami/hanIMo

Qt程序的缺省輸入風(fēng)格是Ove仃heSpo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論