解析 VC 2005 下編譯安裝并開發(fā) QT 4.4.3 應(yīng)用程序
VC 2005 下編譯安裝并開發(fā) QT 4.4.3 應(yīng)用程序是本文要介紹的內(nèi)容,一部分時從壇子里看的,一部分時心得,不多說,先來看內(nèi)容。最近研究webkit,順便研究了一下QT。發(fā)現(xiàn)網(wǎng)上流傳的一個轉(zhuǎn)帖《VC 2005 下如何編譯安裝并開發(fā) QT 4.4.0 應(yīng)用程序》
Qt 是一個跨平臺的C++圖形用戶界面庫,由挪威TrollTech公司出品,Qt支持所有的UNIX系統(tǒng),包括Linux系統(tǒng),還支持WinNT/Win2k、Windows 95/98平臺。
本文將使用簡單的幾個步驟說明在VC 2005下如何編譯安裝并開發(fā)QT應(yīng)用程序:
一、下載及安裝
1. 從官方網(wǎng)站http://trolltech.com/lang/cn/downloads/open-source-downloads下載QT最新版本源代碼,ftp://ftp.trolltech.com/qt/source/qt-win-opensource-src-4.4.0.zip,假定解壓到D:\Qt\4.4.0目錄;
2. 從VC 2005的安裝路徑找到vsvars32.bat,例如:在E:\Program Files\Microsoft Visual Studio 8\Common7\Tools,運行cmd,
- C:\> E:
- E:\> "E:\Program Files\Microsoft Visual Studio 8\Common7\Tools"
- E:\Program Files\Microsoft Visual Studio 8\Common7\Tools> vsvars32.bat
- E:\Program Files\Microsoft Visual Studio 8\Common7\Tools> D:
- D:\> cd D:\Qt\4.4.0
- D:\Qt\4.4.0> configure -debug-and-release -static
- D:\Qt\4.4.0> nmake
configure -debug-and-release -static參數(shù)的意義是告訴QT同時編譯為Debug和Release兩個版本的靜態(tài)鏈接庫,不指定參數(shù)則編譯為Debug版本的動態(tài)鏈接庫。 configure大約需要十幾分鐘,nmake則大約需要1小時左右,視你的電腦性能而定。
3. 將Qt路徑添加到VC編譯環(huán)境中,工具->選項->項目和解決方案->VC++目錄,在包含文件一欄添加: D:\Qt\4.4.0\include\QtGui;D:\Qt\4.4.0\include\QtCore;D:\Qt\4.4.0\include,在庫文件一欄添加D:\Qt\4.4.0\lib;將QT安裝路徑添加到Path系統(tǒng)環(huán)境變量中,例如:D:\Qt\4.4.0\bin;
二、交叉編譯
1. 啟動VC,創(chuàng)建一個Hello Qt工程,將工程設(shè)置改為使用多字節(jié)字符集,因為Qt Application的入口函數(shù)不是Unicode的;
2. 啟動Qt Designer,新建窗體->選擇對話框窗體(第一個選擇項),在新建的對話框上面放一個Label控件,將其Title修改為“Hello Qt!”,將該窗體保存到剛才用VC建立的Hello Qt工程目錄,文件名為Hello.ui;
3. 將Hello.ui作為源文件添加到Hello Qt工程中,在Hello.ui上點擊右鍵->屬性,在屬性對話框中選擇自定義生成步驟->常規(guī),在命令行一欄輸入:uic.exe Hello.ui -o HelloUi.h,說明一欄輸入:正在編譯Hello.ui ,在輸出一欄輸入:HelloUi.h,在附加依賴項一欄輸入:uic.exe;Hello.ui,點擊確定;
如果是QObject的子類,則要用:moc.exe XXX.h -o debug/moc_XXX.cpp命令。 例如:
- E:\backup20080122\qt-win-opensource-src-4.4.3\bin\moc.exe -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB
- -DQT_THREAD_SUPPORT -I"e:\backup20080122\qt-win-opensource-src-4.4.3\include\QtCore"
- -I"e:\backup20080122\qt-win-opensource-src-4.4.3\include\QtCore" -I"e:\backup20080122\qt-win-opensource-src-4.4.3\include\QtGui"
- -I"e:\backup20080122\qt-win-opensource-src-4.4.3\include\QtGui" -I"e:\backup20080122\qt-win-opensource-src-4.4.3\include" -I"."
- -I"e:\backup20080122\qt-win-opensource-src-4.4.3\include\ActiveQt" -I"debug" -I"."
- -Ie:\backup20080122\qt-win-opensource-src-4.4.3\mkspecs\win32-msvc2005 -D_MSC_VER=1400
- -DWIN32 WebViewCollection.h -o debug\moc_WebViewCollection.cpp
注意:也可以不使用手工添加方式添加編譯ui文件,直接使用qmake編譯成VC工程,但這樣會破壞原來的工程設(shè)置,因為當(dāng)ui文件修改或添加新的ui后需要重新qmake,重新生成VC工程,因此這里采用了手工添加并設(shè)置編譯腳本的方式,qmake的用法如下:
- D:\Hello Qt> qmake -project -t vcapp -o HelloQt.pro
- D:\Hello Qt> qmake
不需要指定ui文件,qmake會將當(dāng)前目錄所有的ui文件以及C++文件創(chuàng)建一個VC工程。另外QT 4.4是對VC各個版本都兼容的,VC6、VC2003、VC2005、VC2008,編譯安裝步驟都是一致的。
4、在Hello.ui上點擊右鍵->編譯,將在當(dāng)前工程目錄生成HelloUi.h文件;
5、注意:此時需要將生成的HelloUi.h文件添加到工程中。 如果是QObject子類生成的moc_XXX.cpp,也需要添加到工程中。
否則會出現(xiàn):QtCore.lib(qtimer.obj) : error LNK2001: unresolved external symbol __imp___invalid_parameter_noinfo之類的錯誤。
6、打開Hello Qt.cpp,在main函數(shù)添加啟動代碼,完整代碼如下:
- // Hello Qt.cpp : 定義控制臺應(yīng)用程序的入口點。
- #include "stdafx.h"
- #include "HelloUi.h" // ui文件編譯生成的C++文件
- #include <QApplication>
- int _tmain(int argc, _TCHAR* argv[])
- {
- QApplication app(argc, argv);
- QDialog * dlg = new QDialog(); // Qt 窗口對象會自動回收所有的子窗口對象,這里的dlg將被作為最外層窗口,
- 將由QApplication進行回收,因此Qt窗口只能在堆分配對象,且不必使用delete。
- Ui::Dialog ui; // Dialog為ui文件編譯生成的C++類,參見HelloUi.h
- ui.setupUi(dlg);
- dlg->show();
- return app.exec();
- }
在工程設(shè)置附加依賴項中添加QtCore.lib QtGui.lib,編譯工程,運行即可出現(xiàn)Hello Qt程序。
Windows程序里面的消息機制,在MAC平臺則是蘋果事件,各平臺的驅(qū)動方式各異,Qt則將這些不一致的平臺機制統(tǒng)一起來,形成了信號和槽機制,來處理各種系統(tǒng)事件,以實現(xiàn)跨平臺的目的,因此Qt程序幾乎不經(jīng)過任何修改,便可以在其它平臺編譯通過。
但是我用其中的方法時,編譯時不能通過:
- QtCore.lib(qtimer.obj) : error LNK2001: unresolved external symbol __imp___invalid_parameter_noinfo
(后來才知道,這是因為沒有把moc生成的moc_XXX.cpp文件添加到工程導(dǎo)致的)
#p#
采用qmake方法才正常編譯通過。下面把我的方法記錄如下:
一、下載及安裝
1、從官方網(wǎng)站http://trolltech.com/lang/cn/downloads/open-source-downloads下載QT最新版本源代碼,ftp://ftp.trolltech.com/qt/source/qt-win-opensource-src-4.4.0.zip,假定解壓到D:\Qt\4.4.0目錄;
2. 從VC 2005的安裝路徑找到vsvars32.bat,例如:在E:\Program Files\Microsoft Visual Studio 8\Common7\Tools,運行cmd,
- C:\> E:
- E:\> "E:\Program Files\Microsoft Visual Studio 8\Common7\Tools"
- E:\Program Files\Microsoft Visual Studio 8\Common7\Tools> vsvars32.bat
- E:\Program Files\Microsoft Visual Studio 8\Common7\Tools> D:
- D:\> cd D:\Qt\4.4.3
- D:\Qt\4.4.3> configure -debug-and-release -static
- D:\Qt\4.4.3> nmake
configure -debug-and-release -static參數(shù)的意義是告訴QT同時編譯為Debug和Release兩個版本的靜態(tài)鏈接庫,不指定參數(shù)則編譯為Debug版本的動態(tài)鏈接庫。 configure大約需要十幾分鐘,nmake則大約需要2小時左右,視你的電腦性能而定。
3、設(shè)置環(huán)境變量:
我的電腦>屬性>高級>環(huán)境變量>用戶變量里面設(shè)置幾個變量:
PATH中增加C:\Qt\4.4.3\bin(如果沒有就創(chuàng)建),
創(chuàng)建QMAKESPEC值為 win32-msvc2005,這個值還是根據(jù)你要生成的Vs版本,6.0 使用win32-msvc, 2003 使用win32-msvc.net, 2005就是 win32-msvc2005
創(chuàng)建QTDIR值為 C:\Qt\4.4.3
如果你機器上安裝多個版本的QT,就通過這三個環(huán)境變量來切換了,我同時有C:\Qt\4.0.0,那么就把那些前綴都換成C:\Qt\4.0.0,就使用4.0了。最后為了使的你剛才修改的環(huán)境變量生效,重啟cmd,可以通過C:\> qmake -v來看你使用的QT版本。
二、交叉編譯
1、啟動Qt Designer,新建窗體->選擇對話框窗體(第一個選擇項),在新建的對話框上面放一個Label控件,將其Title修改為“Hello Qt!”,將該窗體保存到HelloQT目錄下,文件名為HelloQT.ui;
2、運行命令提示行,到HelloQT目錄下:
3、運行
- HelloQT> qmake -project -t vcapp -o HelloQT.pro
- HelloQT> qmake
4、此時,HelloQt文件夾下生成了VC工程文件:HelloQT.vcproj; 此外還有生成的ui_helloQT.h文件
5、將此工程添加到你的解決方案中。
6、向工程中添加helloQT.cpp
- // helloQT.cpp : Defines the entry point for the console application.
- // ui文件編譯生成的C++文件
- #include "ui_helloQT.h"
- int main(int argc, char* argv[])
- {
- QApplication app(argc, argv);
- QDialog * dlg = new QDialog(); // Qt 窗口對象會自動回收所有的子窗口對象,這里的dlg將被作為最外層窗口,
- 將由QApplication進行回收,因此Qt窗口只能在堆分配對象,且不必使用delete。
- Ui::Dialog ui; // Dialog為ui文件編譯生成的C++類,參見HelloUi.h
- ui.setupUi(dlg);
- dlg->show();
- return app.exec();
- }
編譯,運行通過。
以上基本上可以開發(fā)簡單的程序了,如果需要使用opengl等其他的,自己google下吧。有米的人也可以直接購買QT的商業(yè)版,可以直接集成到VS里面去,有向?qū)У葨|西。我使用Qt 4.0的還是比較爽的。自己有時間好好看看examples里面的例子,開發(fā)的時候也可以作為參考,很好的資料。
小結(jié):VC 2005 下編譯安裝并開發(fā) QT 4.4.3 應(yīng)用程序的內(nèi)容介紹完了,希望本文對你有多幫助,更多資料請參考編輯推薦!