Qt是Trolltech公司的一個產品。Trolltech是挪威的一家軟件公司,主要開發兩種產品:一種是跨平台應用程序界面框架;另外一種就是提供給做嵌入式Linux開發的應用程序平台,能夠應用到PDA和各種移動設備上。Qt和Qtopia分別是其中具有代表性的兩個。 Qt是一個多平台的C++圖形用戶界面應用程序框架,它能給用戶提供精美的圖形用戶界面所需要的所有元素,而且它是基於一種面向對象的思想,所以用戶對其對象的擴展是相當容易的,並且它還支持真正的組件編程。 Qt是Linux桌面環境KDE的基礎。筆者認為,可以說Qt與Windows下的Mfc的實質是一樣的,所以Qt最大的優點在於其跨平台性,可以支持現有的多種操作系統平台,主要有: ◆ 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上的安裝和使用,還有在開發過程中可能碰到的一些問題。 Qt 和Qtopia的安裝 如果需要安裝一個帶FramBuffer的Qtopia平台,需要有以下軟件(所列舉軟件以筆者使用的為例): ◆ Qtopia 1.6.0; ◆ Tmake 1.11; ◆ Qt/Embedded 2.3.4(Qtopia 1.6.0是基於該開發平台上開發的); ◆ Qt/Embedded 2.3.2 for X11; ◆ Qt 3.1.2 for X11。 在Trolltech公司的網站上可以下載該公司所提供的Qt/Embedded的免費版本。 Qtopia平台安裝分為以下幾個步驟:
1. 解包Qtopia 在Linux命令模式下運行以下命令: tar xfz qtopia-source-1.6.0 (解包) cd qtopia-source-1.6.0 export QPEDIR=$PWD (設置環境變量) cd..
2. 安裝Tmake 在Linux命令模式下運行以下命令: 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命令模式下運行以下命令: 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的參數中添加-system-jpeg和gif,使Qtopia平台能支持jpeg、gif格式的圖形。
4. 安裝Qt/X11 2.3.2 在Linux命令模式下運行以下命令: 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 .. 根據開發者本身的開發環境,也可以在configure的參數中添加別的參數,比如-no-opengl或-no-xfs,可以鍵入./configure -help來獲得一些幫助信息。
5. 安裝Qt/X11 3.1.2 在Linux命令模式下運行以下命令: 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命令模式下運行以下命令: 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的使用 根據上面的步驟安裝完成了Qt/Embedded和Qtopia之後,就可以運行這些程序了。 運行Qt的虛擬仿真窗口:在Linux的圖形模式下運行命令qvfb&;Qtopia只是一個用Qt/Embedded開發的程序,運行Qtopia,在圖形模式下運行命令: export QTDIR=$QTEDIR, qpe &; 這樣Qtopia的程序就運行在QVFB上,即Qt的虛擬仿真窗口。 Qt/Embedded是針對嵌入式Linux而開發的一種開發工具,Qt封裝了一些常用的類,而且這些類的名字都以Q字開頭命名,如QString、QDialog等。這裡主要介紹一下如何利用Qt Designer來設計組件,並生成相應的代碼。 在Qt中,把組件分為復合體、原始體和配件。而在Qt中,組件是由一些抽象類、復雜的組件類、管理組件幾何特性的類等組成。 Qt中有三個主要的基類:QObject、Qapplication和QWidget。 在Qt中編程,利用Signal和Slot進行對象之間的通信是Qt的主要特征。它與Windows中的消息機制非常類似,但是Signal和Slot機制真正實現了一種消息的封裝。當對象的狀態改變時,發出Signal,通知所有的Slot接受Signal,盡管它不知道哪些函數是Slot,Slot一開始也不知道哪些Signal可以接收。Signal和Slot之間不是一一對應的關系,一個Signal可以發給多個Slot, Slot也可以接收多個Signal。Slot除了可以接收Signal以外,與其它的成員函數沒有區別。這種機制比使用回調函數要靈活,但是會減慢程序的運行速度。不過在現在高速CPU的面前,這種損失是無足輕重的,而且它還能保證程序的簡明性和靈活性,非常便利。 在Qt的組件中,不僅定義了常用的成員變量和成員函數,還定義了所有與該組件相關的Signal和Slot。 要將組件組合起來,最簡單的方法就是使用Qt Designer。首先要啟動Qt Designer,在Linux命令模式下,鍵入以下命令(假設Qt安裝在/usr/local下): cd qt-2.3.2/bin ./designer 這樣就可以啟動一個與Windows下的Delphi相類似的如圖1的界面。 然後新建一個QFrame,將自己需要的組件直接拖拉到這個Frame中,相信很多人都有過這樣的經歷,此處就不再詳細描述了。完成之後存盤時,會將這個新的組件保存為一個擴展名為.ui的文件。假設所存的文件名為test.ui,用vi test.ui來查看這個文件,發現這是一個用XML語言寫的一個文本。下面用這個test.ui生成相應的test.h和test.cpp。同樣還是在這個目錄下,可以看到一個uic的工具,這個是Qt專門用來將ui文件生成.h和.cpp文件的,在終端模式下鍵入以下命令: ./uic -o test.h test.ui ./uic -o test.h -i test.cpp test.ui 此時就能看到生成了相應test.h和test.cpp,這是一個類。當然這只是一些表面的東西,還需要在這些代碼中添加相應的Signal和Slot,完成所需要的操作。值得注意的是,相應版本生成的ui最好用相應版本的uic來生成代碼。如果用Qt 3.1.2的Designer生成的ui,用Qt 2.3.2的uic來生成代碼,生成的代碼都會是一些空函數。 在一般的開發過程中,首先通過這個ui生成的一個類,在Qt中通常叫做Base,如上面的例子,叫做testBase;然後再新建一個類,來繼承這個Base。通常叫做實現類Impl,如testImpl。在這個實現類裡面定義所需要的成員函數、Signal和Slot,因為ui可能是經常需要改動的。如果這樣做,每次只需要在Designer中修改ui,而不用去理會這些成員函數、Signal和Slot了。 編譯一個Qt程序必然需要Makefile,在Qt中提供了一個專門生成Makefile的工具,就是tmake。用tmake需要根據編寫的程序寫一個.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編譯所編寫的程序就可以了。