QT 桌面安裝與建立運(yùn)行環(huán)境
QT 桌面安裝與建立運(yùn)行環(huán)境是本文介紹的內(nèi)容,在Trolltech公司的網(wǎng)站上可以下載該公司所提供的Qt/Embedded 的免費(fèi)版本,在安裝產(chǎn)品光盤以后,本次實(shí)驗(yàn)?zāi)夸浵乱延幸螺d的文件,在/arm2410s/gui/Qt/src 下。在做實(shí)驗(yàn)前把本次實(shí)驗(yàn)用到的三個(gè)文件拷貝到/root/2410sQt 目錄下。
- [root@BC root]#cd /root/
- [root@BC root]#mkdir 2410sQt
- [root@BC root]#cd /arm2410dev/gui/Qt/src
- [root@BC src]#cp -arf tmake-1.13.tar.gz qt-embedded-2.3.10-free.tar.gz
- qt-x11-2.3.2.tar.gz /root/2410sQt
安裝編譯器arm-linux-gcc-3.4.1:
- [root@BC src]#cd /arm2410dev/gui/Qt/tools
- [root@BC tools]#tar xjvf arm-linux-gcc-3.4.1.tar.bz2 -C ./
- [root@BC tools]#vi /root/.bash_profile //打開文件
將該文件中的PATH 變量改為PATH=$PATH:$HOME/bin:/arm2410s/gui/Qt/tools
- /usr/local/arm/3.4.1/bin/,存盤后退出。
- [root@BC tools]# source /root/.bash_profile
如果安裝正確的話,在任意路徑下輸入ar 后按Tab 鍵即可列出編譯器文件。
Qt/Embedded 平臺(tái)的搭建需要以下幾步:
***步,解壓安裝包并設(shè)置環(huán)境變量
安裝Tmake
- cd ~/2410sQt
- tar –xzf tmake-1.13.tar.gz
- export TMAKEDIR=$PWD/tmake-1.13
安裝Qt 2.3.2
- cd ~/2410sQt
- tar –xzf qt-x11-2.3.2.tar.gz
- export QT2DIR=$PWD/qt-2.3.2
安裝Qt/Embedded
- cd ~/2410sQt
- tar –xzf qt-embedded-2.3.10-free.tar.gz
- export QTEDIR=$PWD/qt-2.3.10
環(huán)境變量的設(shè)置是非常重要的,它關(guān)系到能否正確的安裝及編譯這些安裝包,下面介紹一下這些環(huán)境變量:
- TMAKEDIR : 指向用于編譯Qt/Embedded 的Tmake 工具
- QT2DIR : 指向qt-2.3.2 的文件夾
- QTEDIR : 指向qt-2.3.10 的文件夾
第二步,編譯Qt/Embedded。
1、Build Qt2.3.2
- cd $QT2DIR
- export TMAKEPATH=$TMAKEDIR/lib/linux-g++
- export QTDIR=$QT2DIR
- export PATH=$QTDIR/bin:$PATH
- export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
- ./configure -no-xft //出現(xiàn)選項(xiàng)時(shí)都輸入yes
- make
- cp –arf bin/uic $QTEDIR/bin/
./configure 是對Qt 進(jìn)行配置,它包括很多選項(xiàng),例如可以通過添加“ -no-opengl”等,如果想要進(jìn)一步了解可以通過鍵入 ./configure --help 來獲得更多的幫助信息。編譯完成后需要將生成的/bin/uic 復(fù)制到$QTEDIR 下新創(chuàng)建的目錄bin 中,因?yàn)樵陔S后編譯
Qt/Embedded 的時(shí)候會(huì)用到這個(gè)工具。
2、Build Qvfb
- export TMAKEPATH=$TMAKEDIR/lib/linux-g++
- export QTDIR=$QT2DIR
- export PATH=$QTDIR/bin:$PATH
- export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
- cd $QTEDIR/tools/qvfb
- /root/2410sQt/tmake-1.13/bin/tmake -o Makefile qvfb.pro
- make
- mv qvfb $QTEDIR/bin/
這一步build qvfb 并建立了從Qt/Embedded 2.3.10 到Qt 2.3.2 的靜態(tài)庫的鏈接。其中qvfb 工具用來生成Virtual framebuffer,這是一個(gè)非常有用的工具,它可以模擬在開發(fā)板上的顯示情況,如果在Virtual framebuffer 中運(yùn)行沒有問題的話,可以直接通過交叉編譯在開發(fā)板上運(yùn)行。
#p#
3、Build Qt/Embedded
- cd $QTEDIR
- export TMAKEPATH=$TMAKEDIR/lib/qws/linux-x86-g++
- export QTDIR=$QTEDIR
- export PATH=$QTDIR/bin:$PATH
- export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
- ./configure -no-xft -qvfb -depths 4,8,16,32
- yes
- 5
- make
在配置./configure 中-qvfb 用來支持Virtual framebuffer,-depths 4,8,16,32 支持4 位,8位,16 位,32 位的顯示深度,此外還可以添加如-syestem-jpeg 和-gif 來提供對jpeg 和gif的支持。配置系統(tǒng)同時(shí)還支持對特定平臺(tái)系統(tǒng)選項(xiàng)的添加,但一般來講,凡是支持framebuffer 的Linux 系統(tǒng)都可以使用“linux-generic-g++”平臺(tái)。詳細(xì)的配置信息可以通過運(yùn)行./configure --help 命令來查看。
第三步,查看運(yùn)行結(jié)果
如果上面各步都能夠成功的編譯通過,下面就可以通過運(yùn)行。Qt/Embedded 自帶的demo 來查看運(yùn)行結(jié)果。
在Virtual framebuffer 上運(yùn)行:
- export QTDIR=$QTEDIR
- export PATH=$QTEDIR/bin:$PATH
- export LD_LIBRARY_PATH=$QTEDIR/lib:$QT2DIR/lib:$LD_LIBRARY_PATH
- cd $QTEDIR/examples/launcher
- qvfb -width 640 -height 480 &
- sleep 10
- ./launcher -qws
運(yùn)行結(jié)果如圖9-3:
圖9-3 Qt/Embedded Demo程序
將上面的步驟完成后,我們就已經(jīng)建立好了在本機(jī)上開發(fā)Qt 應(yīng)用程序的環(huán)境,下面我們通過編寫一個(gè)“Hello Embedded”的程序來了解Qt 程序設(shè)計(jì)。
- [root@BC qt-2.3.10]# cd /root/2410sQt/
- [root@BC 2410sQt]# mkdir exp
- [root@BC 2410sQt]# cd exp
- [root@BC exp]# vi hello.cpp
#p#
使用VI 編寫文件hello.cpp,程序代碼如下:
- //hello.cpp
- #include <qapplication.h>
- #include <qlabel.h>
- int main(int argc, char **argv)
- {
- QApplication app (argc, argv);
- QLabel *hello = new QLabel("Hello Qt/Embedded!", 0);
- app.setMainWidget(hello);
- hello->show();
- return app.exec();
- }
現(xiàn)在開始逐行講解一下每一句是什么意思,掌握了這些以后可以幫助我們更加了解Qt的程序設(shè)計(jì)。
第1 行和第2 行包含了兩個(gè)頭文件,這兩個(gè)頭文件中包含了QApplication 和 QLabel類的定義。
第5 行創(chuàng)建了一個(gè)QApplication 對象,用于管理整個(gè)程序的資源,它需要2 個(gè)參數(shù),因?yàn)镼t 本身需要一些命令行的參數(shù)。
第6 行創(chuàng)建了一個(gè)用來顯示Hello Qt/Embedded!的部件。在Qt 中,部件是一個(gè)可視化用戶接口,按鈕、菜單、滾動(dòng)條都是部件的實(shí)例。部件可以包含其它部件,例如,一個(gè)應(yīng)
用程序窗口通常是一個(gè)包含QMenuBar、QToolBar、QStatusBar 和其它部件的一個(gè)部件。
在QLabel 函數(shù)中的參數(shù)0 表示,這是一個(gè)窗口而不是嵌入到其它窗口中的部件。
第7 行設(shè)置hello 部件為程序的主部件,當(dāng)用戶關(guān)閉主部件后,應(yīng)用程序?qū)?huì)被關(guān)閉。如果沒有主部件的話,即使用戶關(guān)閉了窗口程序也會(huì)在后臺(tái)繼續(xù)運(yùn)行。
第8 行使hello 部件可視,一般來說部件被創(chuàng)建后都是被隱藏的,因此可以在顯示前根據(jù)需要來訂制部件,這樣的好處是可以避免部件創(chuàng)建所造成的閃爍。
第9 行把程序的控制權(quán)交還給Qt,這時(shí)候程序進(jìn)入就緒模式,可是隨時(shí)被用戶行為激活,例如點(diǎn)擊鼠標(biāo)、敲擊鍵盤等。
下面我們要讓我們的程序跑起來,首先要讓它能夠在Virtual framebuffer 中顯示出來,然后再通過交叉編譯在開發(fā)板上運(yùn)行。
要在本機(jī)的Virtual framebuffer 中顯示結(jié)果,下面幾步是必須的:
1.生成工程文件(.pro)
每一個(gè)Qt 程序都對應(yīng)著一個(gè)工程文件,因?yàn)閠make 工具要借此工程生成相應(yīng)的Makefile 文件。生成工程文件需要使用progen 工具,它的位置在$TMAKEDIR/bin 下,使用progen 生成工程文件的方法如下:
- $TMAKEDIR/bin/progen –t app.t –o hello.pro
生成的這個(gè)hello.pro 工程文件是可以被修改的,可以編輯里面的頭文件、源文件等內(nèi)容。
2.生成Makefile 文件
Qt 提供了生成Makefile 文件的工具tmake,這極大地方便了應(yīng)用程序的開發(fā),節(jié)省了大量的時(shí)間,而且還可根據(jù)不同平臺(tái)的需要生成適合于不同平臺(tái)的Makefile 文件。
在使用tmake 工具前,必須查看相應(yīng)的環(huán)境變量是否正確,由于我們要編譯在本機(jī)上運(yùn)行的Qt 程序,所以指定的編譯器應(yīng)該為“linux-x86-g++”,在命令行中輸入下面的命令
來檢查環(huán)境變量是否正確:
- echo $TMAKEPATH
查看返回的結(jié)果的結(jié)尾字符是否是“……/qws/linux-x86-g++”,如果不是的話需要在命令行中重新設(shè)置TMAKEPATH
- export TMAKEPATH=/tmake 的安裝路徑(如$TMAKEDIR)/lib/qws/linux-x86-g++
此外還要使QTDIR 指向Qt/Embedded 的安裝路徑,如:
- export QTDIR=$QTEDIR 或者直接指定路徑
- export QTDIR=……/qt-2.3.10
完成了上面的環(huán)境變量的設(shè)置,并用echo 命令檢查無誤以后,就可以使用tmake 工具來生成我們需要的Makefile 文件,在命令行中輸入如下命令:
- $TMAKEDIR/bin/tmake –o Makefile hello.pro
完成上面的步驟以后就可以在當(dāng)前的目錄中生成一個(gè)Makefile 文件,關(guān)于Makefile文件的功能和結(jié)構(gòu)這里就不再做過多的介紹了,可以參考前面的章節(jié)來了解Makefile。
***在命令行中輸入 “make”命令就可以對整個(gè)程序進(jìn)行編譯鏈接了,最終生成了一
個(gè)二進(jìn)制的可執(zhí)行文件hello。用Virtual framebuffer 顯示效果如下:
圖9-4 Hello Embedded
我們可以通過對QLabel *hello = new QLabel("Hello Qt/Embedded!", 0)這句進(jìn)行修改,使我們的程序顯示起來更為美觀,修改如下:
- QLabel *hello=new QLabel("<h2><fontcolorfontcolor=blue>Hello" "<i>Qt/Embedded!</i> </font> </h2>", 0);
修改后顯示效果如圖所示:
圖9-5 修改后Hello Embedded
小結(jié):關(guān)于QT 桌面安裝與建立運(yùn)行環(huán)境的內(nèi)容介紹完了,希望本文對你有所幫助!