導航:首頁 > 源碼編譯 > qt指定條件編譯條件

qt指定條件編譯條件

發布時間:2022-05-13 07:15:00

A. QT編程與移植的問題

1. 簡介
QT是目前在linux上使用較廣的一個圖形系統。用戶經常配合KDE桌面環境來使用。需要注意的是我們看到的並操作的是KDE,而不是QT。QT只是一套庫函數(類庫),KDE才是可執行程序.同時KDE為了其他程序方便的對其操作,也提供一套庫函數(類庫)。
在PC機上的QT是基於X11圖形系統的,在嵌入設備中往往不需要這么累贅,只需使用QTE(QT Embedded)即可包括PC平台中X11和QT庫的功能。
另一方面,嵌入設備受許多條件的限制,桌面系統也不能直接使用PC機上已有的系統。QTOPIA就是相當於KDE的桌面系統.根據具體嵌入設備的需要可以配置成phone和pocket pc兩種。

2. 准備工作
2.1 目標
首先要明確將要乾的是什麼,將怎麼做。
我們的目標很明確——就是在自己的開發板上使用基於QTE的桌面系統QTOPIA。
我們的工作往往是先在PC完成以後移植到ARM平台上;先編譯好QTE的庫,再編譯QTOPIA。因為這個系統和具體的設備有關(例如:觸摸屏、時鍾、電源管理設備等),所以最後還需要做設備介面的移植工作。

2.2 軟體包
系統平台:RedHat 9(完全安裝)
qt-embedded-2.3.7.tar.gz (qte的庫)
qt-x11-2.3.2.tar.gz (為了生成相應的qtdesigner和qvfb)
qtopia-free-1.7.0.tar.gz (qte的桌面環境程序)
tmake-1.11.tar.gz (編譯時會用到)
e2fsprogs-1.35.tar.gz (只使用其中的uuid的庫)
當下載完這些包以後我們先建立一個工作環境。假設所有軟體包都下載在用戶目錄下,通常都是/root。

2.3 環境的建立
# cd ~
# mkdir x86-qtopia

# tar zxvf qt-x11-2.3.2.tar.gz
# mv qt-2.3.2 qt-x11

# cd x86-qtopia
# tar zxvf ../tmake-1.11.tar.gz
# tar zxvf ../qt-embedded-2.3.7.tar.gz
# tar zxvf ../qtopia-free-1.7.0.tar.gz
# tar zxvf ../e2fsprogs-1.35.tar.gz
# mv tmake-1.11 tmake
# mv qt-2.3.7/ qt
# mv qtopia-free-1.7.0 qtopia
# mv e2fsprogs-1.35 e2fsprogs

# cp x86-qtopia arm-qtopia -rf
記住,用戶目錄下的x86-qtopia目錄是PC機上編譯的工作環境,arm-qtopia是arm平台的交叉編譯工作環境,qt-x11是兩者公用的。

接下來還必須編譯qt-x11,主要是為了編譯生成其中的qtdesigner和qvfb。qvfb程序在系統中並未安裝,需要我們自己編譯。qtdesigner是和qt庫的版本是相關的,當我們使用PC機上和QTE版本不符的qtdesigner時,可能在PC機上的qt-x11能使用的控制項在QTE上並未實現,導致應用程序編譯不成功。所以,我們使用2.3版本的QTE時,必須使用相同版本的qt-x11編譯生成的qtdesigner和qvfb。
# cd ~/qt-x11
# export QTDIR=$PWD
# echo yes | ./configure -static -no-xft -no-opengl -no-sm
# make -C src/moc
# cp src/moc/moc bin
# make -C src
# make -C tools/designer
# make -C tools/qvfb
# cp tools/qvfb/qvfb bin
# strip bin/uic bin/moc bin/designer bin/qvfb
# cp qt-x11/bin/* qt/bin -f
# cp qt-x11/bin/* qt/bin -f

3. PC平台編譯
編譯之前做一下准備工作:打開一個控制台之後設置環境變數。
# cd ~/x86-qtopia
# export QTDIR=$PWD/qt
# export QPEDIR=$PWD/qtopia
# export TMAKEDIR=$PWD/tmake
# export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
# export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH

3.1 編譯QTE
# cd $QTDIR
# cp $QPEDIR/src/qt/qconfig-qpe.h src/tools/ -f
# (echo yes ; echo no) | ./configure -platform linux-generic-g++ -qconfig qpe -depths 16,24,32
# make -C src clean
# make -C src
看一下$QTDIR目錄下是否已經有了qt的庫了?

3.2 編譯QTOPIA
# cd $QPEDIR/src
# ./configure
# make clean
# make

3.3 測試QTOPIA
激動的時刻來了,如果這個步驟成功將意味著可以做應用開發了。
# cd ~/x86-qtopia
# mkdir dist
# cd dist
# cp -af ../qt/lib/ .
# cp -af ../qtopia/apps .
# cp -af ../qtopia/bin .
# cp -af ../qtopia/plugins .
# cp -af ../qtopia/i18n .
# cp -af ../qtopia/pics .
因為Security.png有點錯誤,所以必須進行一下操作:
# cd pics
# pngtopnm Security.png>a.pnm
# pnmtopng a.pnm>Security.png
因為qpe運行的時候,當前目錄必須是$QTDIR/bin,所以不能在$QTDIR目錄下執行bin/qpe來運行。
# export QTDIR=~/x86-qtopia/qt
# cd $QTDIR/bin
# ./qvfb &
# ./qpe &
看到qpe在qvfb中的界面了嗎?我看到了~!

4. 目標平台交叉編譯
與PC機上的編譯一樣,打開一個控制台之後需要設置環境變數。
# cd ~/arm-qtopia
# export QTDIR=$PWD/qt
# export QPEDIR=$PWD/qtopia
# export TMAKEDIR=$PWD/tmake
# export TMAKEPATH=$TMAKEDIR/lib/qws/linux-arm-g++
# export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH
4.1 交叉編譯QT

4.2 交叉編譯QTOPIA

5. 移植QT中的相關設備介面
5.1 滑鼠

5.2 觸摸屏

6. 移植QTOPIA中的相關設備介面
6.1 電源管理設備

7. 編寫QT程序並移植

8. 編寫QTOPIA程序並移植
X. tips
@ 移植的時候編譯器的版本很重要.qte-2.3.7在redhat9的3.2編譯器下工作很正常,但在Fedora4的gcc-3.4.2編譯器下編譯卻不成功.根據測試,PC平台上使用gcc-3.2可以順利編譯,arm平台上使用gcc-2.95.2可以順利通過(gnuarm的編譯器好像不行,用華恆光碟中的armv4l-unkown-linux-gcc的可以編譯通過)
@ 編譯過程中會提示缺少uuid的頭文件和庫,下載e2fsprogs-libs-1.38.tar.gz,裡面有uuid的相關代碼.
@ 編譯的時候需要指定編譯器,在qt的configs目錄下有許多文件,修改linux-arm-g++-*這些文件中的相關定義.例如:默認使用arm-linux-gcc編譯器,而我使用的是GNUARM的arm-elf-gcc編譯器,替換文件中所有arm-linux-前綴為arm-elf-即可.

B. Qt下如何編寫C++程序

QT是基於消息-槽機制的
類似MFC,可以手寫界面上的按鈕或者文本框,也可以用QT自帶的拖拽工具,我原來用QT4寫過FTP的伺服器端和客戶端,基本上是用C++寫的,然後用makefile編譯,基本技術就是用TCP+並發操作來實現的。
你自己在網上找找相應的例子吧,不太難~~
祝你學習順利!

C. qtcreator如何執行make clean

重新生成配置文件, 再次編譯即可~··。
寫一個函數..onClean(){文本框1->clean();文本框2->clean();文本框3->clean();}點擊按鈕或別的事件觸發時就調用那個函數就ok了..
只能說有可能成功。make的工作原理是依賴output的時間戳,如果前一次make留下的內容不完全正確,有可能不會trigger重新編譯的。make clean一下比較放心。這具體要看你的makefile是怎麼寫的了。如果你的庫文件也是一個編譯目標的話,就不用make clean,因為在make的時候,系統會自動的編譯的改動過的庫文件;如果你的庫文件只是單獨的一個編譯附加條件的話,那麼編譯器可能不會去編譯它。如果不確定的話,就先make clean一下。再編譯吧,這樣可能穩妥一些,特別是你如果改變了環境變數等。

D. 我在windows下用QT寫了個程序,把這個源代碼直接在linux下編譯可以嗎

可以,只要你不調用Windows的API函數就可以。 還有你在不同的系統可以使用條件編譯那樣就不存在任何問題了

E. 如何讓 qt mingw 編譯vtk

設置三個變數(a,b,c),對應三個按鍵 初值都是0, 一個按鍵按下後,對應的變數賦值1(a,b,c=1), 之後判斷語句,判斷條件中三個變數間進行與操作

F. QT if多個判斷條件

編寫一個簡單的ping測試腳本,由用戶輸入起始和中指IP地址。
其中需要判斷用戶輸入的IP地址必須是0-255的訪問,使用if語句進行條件判斷如下:if["${beginum}"-lt0]||["${beginnum}"-gt255]||["${endnum}"-lt0]||["${endnum}"-gt255],運行的時候報錯,經過幾次嘗試才知道這種if[條件1||條件2]格式只能支持最多2個條件。if[[條件1||條件2||條件3||條件N]]使用這種雙重中括弧的形式能夠支持多個條件。

G. arm嵌入式linux qt入門問題請教

1.qt-x11是支持x11庫的qt,用於linuxPc運行環境。qt-embedded是用於嵌入式環境的qt庫。
2.可以,只要選對了交叉編譯器。
3.qmake是用來生產makefile的,make是通過makefile文件編譯成可執行文件的。
4.他是嵌入式的qt庫不僅能編譯成arm平台的也可以編譯成其它平台的,比如mips平台。
5.沒有,要適應在真機上調試。
6.qt有個qtconf文件你可以通過修改該文件條件編譯qt庫,這樣可減小qt庫的體積,不過有些qt的方法會因為條件編譯的qt庫兒無法使用。
7.這個需要適配,有時要簡單修改一下qt代碼。
8.根據qt版本選擇,qt的版本高就選擇高版本的編譯器。編譯qt2一定要用2.95.3,qt4用3.4.1。
9.只要配上相應的qt庫就可以運行,要運行qt4就需要你自行編譯qt4的庫。

H. QT程序怎麼移植到開發板並運行

需要的條件:
1.上位機編譯好的可執行文件,以hello為例
在虛擬機的Ubuntu下,寫好代碼之後,定位到當前目錄,執行命令
$ qmake -project //生成工程文件.pro
$ qmake //生成makefile
$ make //生成可執行文件hello
注意這些命令是在arm版的qt環境下的編譯命令!執行qmake -v可查看其是否是arm版本,使用的是否是arm的庫!執行file hello 可以查看hello是否是arm下運行的程序!
2.移植好QT庫的開發板
剛開始學,只需要移植最基本的幾個庫就行了!觸摸屏的、滑鼠的、鍵盤的以後再說!分別是:libQtGui.so libQtCore.so libQtNetwork.so 以及fonts下的字型檔
為了防止錯誤,我一並把他們的相關鏈接文件so.4、 so.4.7、 so.4.7.2 都移植過去了!
移植方法你可以使用nfs !U盤!我用nfs速度太慢,非常不方便,索性用U盤拷過去了!因為這幾個庫小的不到1M,大的13M,U盤拷的還是很快的!比較讓我費勁的是虛擬機不支持把鏈接文件拖拽到xp環境下!我只要在虛擬機里用郵件發到我的郵箱里,再在xp環境下把這些東西下下來,再通過U盤拷貝!曲折啊。。。我的虛擬機U盤不識別!
1)從哪兒移植呢?
從你虛擬機里編譯安裝arm版的QT庫裡面拷!..arm/lib下
2)移植過去放在哪兒呢?
最好是跟你在虛擬機裡面的arm版QT所在目錄一樣,方便操作!看我的
分別在開發板下新建目錄:home/fengchao/qtenv/arm/lib
home/fengchao/qtenv/arm/bin
home/fengchao/qtenv/arm/lib/fonts
把那些.so文件放到lib裡面,把字型檔放到fonts裡面!
3.最重要的一步,設置環境變數!
在開發板的根目錄下執行:
$ vi /etc/profile
然後輸入
export QTDIR=/home/fengchao/qtenv/arm
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH

保存退出! ok !
vi使用:打開文件之後,輸入i,進入編輯模式,再按ESC退出編輯模式進入命令模式,輸入:鍵入命令wq即保存退出,q退出

4.然後把你編譯好的hello這個可執行文件放到你的開發板上,隨便哪兒吧
然後執行
./hello -qws
然後你就可以看見開發板上有顯示了!但是可能文字較小,如果有中文可能還是亂碼,沒事,咱一步步往下來。。。
5.錯誤分析
1)提示沒有鏈接到字型檔
QFontDatabase: Cannot find font directory /home/fengchao/qtenv/arm/lib/fonts - is Qt installed correctly?
這個就是你沒裝好字型檔,好好檢查一下,修改過來!
2)提示沒有QtGui.so no such file of directory
也是因為你沒有移植好這個庫或者跟他鏈接的文件,再或者環境變數有誤!

I. qt如何設置宏區分同一個平台多套件編譯

在pro裡面定義一個宏,然後在代碼中根據這個宏進行條件編譯。

下面是一個示例:

網頁鏈接

J. QT是什麼原理如何實現跨平台

java一樣,針對每一種OS平台,QT都有一套對應的底層類庫,而介面是完全一致的。
因此只要是在QT庫上開發的程序,放在任何一種平台下都可以編譯運行(前提條件是:程序中沒有使用某OS特有的機能)。

也就是說在OS和應用層之間,增加了一個平台層來保證可移植性。

閱讀全文

與qt指定條件編譯條件相關的資料

熱點內容
可愛的程序員陸漓劇照 瀏覽:850
怎樣把截屏壓縮成300kb 瀏覽:224
dart文件加密 瀏覽:39
java對接攝像頭源碼 瀏覽:885
安卓項目開發實例附源碼 瀏覽:728
程序員蘋果全家桶 瀏覽:197
遠程命令阻塞 瀏覽:730
有網頁源碼怎麼查數據 瀏覽:100
win10下make編譯速度過慢 瀏覽:865
微機原理編譯環境 瀏覽:17
怎麼把圖紙轉換成pdf 瀏覽:540
安卓libcurl編譯64 瀏覽:904
手機app怎麼測速 瀏覽:275
中興gpon命令 瀏覽:885
python中取出字典key值 瀏覽:682
Linux目錄inode 瀏覽:147
手機上如何用文件夾發郵件 瀏覽:429
暢課app密碼忘了怎麼找回 瀏覽:79
怎麼編譯idea 瀏覽:231
如何查看伺服器是否做了熱備 瀏覽:1001