當(dāng)我們新建一個(gè)Qt Application項(xiàng)目時(shí),Qt會(huì)自動(dòng)為我們完成所需信息的配置工作和基礎(chǔ)代碼的編寫工作,整個(gè)項(xiàng)目的組織結(jié)構(gòu)如圖1.1所示。

Qt自動(dòng)為我們將相關(guān)代碼文件分為頭文件、源文件和界面文件,并分別進(jìn)行管理。其中頭文件的.h文件和源文件中對(duì)應(yīng)的.cpp文件完成了“相關(guān)類”的代碼編寫工作。源文件中的main.cpp是整個(gè)項(xiàng)目的運(yùn)行基礎(chǔ),是第一個(gè)運(yùn)行的文件。界面文件中的.ui文件記錄了整個(gè)項(xiàng)目的GUI編輯情況,對(duì)GUI的設(shè)計(jì)即是對(duì)該.ui文件的修改。在一個(gè)Qt項(xiàng)目中以上這些相關(guān)代碼文件都容易理解,唯獨(dú).pro需要特別注意,因?yàn)?pro文件是整個(gè)項(xiàng)目底層的環(huán)境配置文件。下面我會(huì)對(duì).pro文件進(jìn)行更加詳細(xì)的分析和描述。
PRO文件
在Qt中,PRO文件標(biāo)識(shí)了整個(gè)項(xiàng)目的依賴關(guān)系,Qt自帶的工具qmake可根據(jù)PRO文件中記錄的依賴關(guān)系自動(dòng)生成適合不同平臺(tái)的Makefile文件。本文中我打算針對(duì)與采用的案例密切相關(guān)的幾個(gè)要素給出詳細(xì)的分析和示例。如果想了解更多的PRO文件的配置參數(shù)信息可參考Qt pro文件解析。
books.pro文件的詳細(xì)內(nèi)容如下:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = books
TEMPLATE = app
SOURCES += main.cpp\
dialog.cpp
HEADERS += dialog.h
FORMS += dialog.ui
在上述代碼中,Qt行表示Qt使用的核心模塊,core表示Qt內(nèi)核,對(duì)應(yīng)qtcore模塊,幾乎所有Qt程序都要添加該項(xiàng);gui表示圖形界面,對(duì)應(yīng)qtgui模塊,如果程序中使用了界面資源,則需要添加該項(xiàng)。這一行很少改動(dòng),如果需要改動(dòng),則大多加上
Qt += core gui network
表示使用Qt網(wǎng)絡(luò)功能模塊。其他可選選項(xiàng)包括core、gui、widgets、network、xml、quick、multimedia、webkit等。
第2行是進(jìn)行版本控制,如果版本大于4,則使用widgets實(shí)現(xiàn)界面處理。這主要用于兼容舊版本Qt程序。
第3行是EXE程序輸出的文件名,一般不做修改。
第4行表示程序類型,是比較重要的一行。app表示程序是一個(gè)應(yīng)用程序,qmake編譯器將根據(jù)它輸出EXE格式的文件,可選值還包括lib,qmake生成一個(gè)DLL或靜態(tài)lib;subdirs子目錄項(xiàng)目;vcapp生成適合VC項(xiàng)目的文件,如.vcproj等。
第5行表示程序使用的代碼文件,包括所有的CPP文件。
第7行是程序使用的頭文件。
第8行表示使用的對(duì)話框界面資源。
不建議手動(dòng)修改PRO文件,如果有需要?jiǎng)t一般只修改Qt行來增加Qt模塊。增加新的CPP文件或頭文件時(shí)可直接在相應(yīng)項(xiàng)目里新建添加,添加的結(jié)果也會(huì)自動(dòng)反映到第5、第7行,不需要手動(dòng)修改。另外一項(xiàng)需要手動(dòng)修改的值是LIBS,它表示Qt程序使用到的第三方庫(kù),在Windows中是DLL文件。
Qt在編譯項(xiàng)目時(shí)采用了“影子編譯”的方式。之所以稱為影子編譯,是因?yàn)镼t將代碼目錄和編譯后生成的目錄進(jìn)行分離,用戶復(fù)制代碼時(shí)可只將重要的代碼分布存儲(chǔ),而編譯產(chǎn)生的各種體積較大的臨時(shí)文件則被分離出來。相比復(fù)制VC項(xiàng)目目錄時(shí)要復(fù)制很多的臨時(shí)編譯文件,Qt影子編譯選項(xiàng)實(shí)現(xiàn)了輕量化操作。另外,用戶可單擊圖1.1左側(cè)的“項(xiàng)目”按鈕,進(jìn)行編譯選項(xiàng)的配置,其中可以直接修改構(gòu)建目錄地址。