Qt Creator是Qt官方的IDE,這個(gè)IDE為Qt編程人員提供了一個(gè)完整的開(kāi)發(fā)環(huán)境。當(dāng)然了,這個(gè)IDE是用Qt寫的,也是免費(fèi)的。這個(gè)IDE真正的編譯部分使用了MinGW gcc compiler。也就是說(shuō),這個(gè)IDE主要的作用是協(xié)助開(kāi)發(fā)人員編寫代碼,并以更加友好的圖形界面方式(而不是命令行)使用MinGW。下面我以MS Visual Studio作為參照,講一些在Windows平臺(tái)上Qt Creator的使用體會(huì)與小技巧。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、虛擬主機(jī)、營(yíng)銷軟件、網(wǎng)站建設(shè)、衡南網(wǎng)站維護(hù)、網(wǎng)站推廣。
1. 工程文件與項(xiàng)目組織結(jié)構(gòu)
VC6之前都是使用dsw文件(之后是sln)來(lái)管理軟件工程的(新版的VC提供dsw轉(zhuǎn)換工具),每個(gè)dsw中可以有很多dsp,即項(xiàng)目文件。每個(gè)dsp中都可以包含任意多的.h.cpp.rc文件,每個(gè)dsp都可以單獨(dú)編譯。可以編譯成exe或dll或ocx等等。一個(gè)dsw中的所有dsp也可以一起編譯,而且各個(gè)dsp之間可以設(shè)定依存關(guān)系。比如一個(gè)dsp叫baseui,一個(gè)叫myapp。其中baseui將編譯成為baseui.dll,而myapp將編譯成為myapp.exe。在myapp中需要用到baseui中的某個(gè)類或某個(gè)資源或某個(gè)函數(shù),那么myapp的依存關(guān)系中就需要有baseui。設(shè)定好依存關(guān)系后,每次整體編譯之前,baseui就會(huì)先于myapp編譯,從而保證myapp需要的lib在編譯之前就已經(jīng)具備。
在Qt Creator中,項(xiàng)目的組織文件是pro類型,它并不具備dsw, dsp那樣的2級(jí)結(jié)構(gòu)。它跟dsw或dsp文件一樣,也是機(jī)器生成的文本文件。不過(guò)在Qt Creator中,你可能經(jīng)常需要手動(dòng)去編輯這個(gè)文件。下面是一個(gè)簡(jiǎn)單的pro文件:
TARGET = Test112
TEMPLATE = app
SOURCES += main.cpp/
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
第1行“TARGET”定義了目標(biāo)文件的名稱;
第2行“TEMPLATE”定義了目標(biāo)文件的類型,app即可執(zhí)行文件。Lib是庫(kù)文件(可以使dll,也可以使使用靜態(tài)鏈接的庫(kù)或是plugin);
“SOURCES”里定義了所有的cpp文件;
“HEADERS”里定義了所有的h文件;
“FORMS”里定義了所有的ui文件(可以在Qt Creator中進(jìn)行可視化編輯的界面類);
這里多說(shuō)一下,ui文件經(jīng)過(guò)qmake之后會(huì)生成ui_開(kāi)頭的一個(gè).h文件,里面由程序自動(dòng)生成一個(gè)新的UI類,類里面把可視化編輯的界面元素都用代碼寫出來(lái)。在ui文件對(duì)應(yīng)的類中,這個(gè)自動(dòng)生成的ui類會(huì)被new一個(gè)新的實(shí)例,用于協(xié)助開(kāi)發(fā)人員。
不知道我說(shuō)明白了沒(méi)有,就是ui文件會(huì)幫助開(kāi)發(fā)人員生成一些界面相關(guān)的代碼,然而這些代碼是以另一個(gè)新的類的成員變量及代碼的形式被用于原來(lái)那個(gè)界面類的。(汗啊,我都說(shuō)累了)我一直不明白為什么Qt Creator不像VC那樣直接去修改原有類的代碼。難道這個(gè)實(shí)現(xiàn)起來(lái)很困難嗎?我打開(kāi).ui文件看過(guò),它其實(shí)是界面的一個(gè)xml文件描述。忘記在哪里看到這種實(shí)現(xiàn)有一個(gè)優(yōu)點(diǎn)就是如果程序界面部分寫的足夠靈活的話,程序升級(jí)時(shí)如果只涉及到界面,那么可以只下載這個(gè)ui文件進(jìn)行升級(jí)即可。這個(gè)特性可能會(huì)讓那些saas軟件開(kāi)發(fā)人員欣喜若狂。但對(duì)于大部分desktop app開(kāi)發(fā)人員來(lái)說(shuō),還是有點(diǎn)讓人迷惑。好在Qt中有signal/slot可用于widget與界面類(如dialog)之間傳遞消息,否則這種中間加一層“假父類”的實(shí)現(xiàn)方式是在是讓人難以接受。
Pro文件說(shuō)了這么多,足以說(shuō)明Qt Creator在項(xiàng)目管理與設(shè)置上并不是特別友好。與VC(甚至VC6)相比都有較大差距。編輯pro文件使我想起了N年前使用命令行方式編寫turbo C程序。呵呵,可能開(kāi)源軟件就是這個(gè)范兒?
關(guān)于pro文件,還有很多內(nèi)容需要開(kāi)發(fā)人員去了解。我會(huì)專門寫個(gè)tip。
2. IDE界面
VC的界面很經(jīng)典,多年未發(fā)生根本性的改變(但相信很多老VCer對(duì)VC6以后的版本取消Class Wizard仍然耿耿于懷)。
Qt Creator界面比較一般。硬傷是沒(méi)有類樹(shù)(Class Tree),這個(gè)對(duì)于OOP來(lái)說(shuō)非常的不便。由于沒(méi)有類樹(shù),開(kāi)發(fā)人員便不能對(duì)類進(jìn)行相關(guān)的編碼,這就意味著增加一個(gè)member function需要在該類的.h和.cpp文件中手工輸入兩次函數(shù)名稱。同時(shí),重載函數(shù)時(shí)也需比在VC中付出更多的時(shí)間。雖然增加一個(gè)函數(shù)的時(shí)間可能只增加5-10秒,但對(duì)于剛剛靈感閃現(xiàn)的程序員來(lái)說(shuō),可能會(huì)比較有挫折感。希望后面的版本能夠加上。
代碼輸入界面Qt Creator做得不錯(cuò),語(yǔ)法著色(不光有標(biāo)準(zhǔn)C++的著色,還有Qt特有關(guān)鍵字的著色,如SLOT等)和類似VC的intellisense功能(代碼自動(dòng)完成)讓人感覺(jué)很舒服。我記得前段時(shí)間看VC Team的BLOG還有人留言說(shuō)intellisense很多問(wèn)題。在我使用Qt Creator的這兩個(gè)月時(shí)間里,還沒(méi)發(fā)現(xiàn)bug。但是我一直覺(jué)得Visual Assist的功能做的最專業(yè)。使用VA的同學(xué)請(qǐng)舉手。
3. 編譯
在編譯速度上,VC全勝??斓貌恢灰稽c(diǎn)點(diǎn)。當(dāng)然qmake本身會(huì)多占用一些時(shí)間,但還是能明顯感覺(jué)到VC快很多。
在編譯代碼質(zhì)量上,我是門外漢,不敢妄下結(jié)論。但我感覺(jué)Qt生成的exe文件會(huì)更大一些,不知是不是為性能做的犧牲。所以TX門寫代碼時(shí),千萬(wàn)不要圖省事,把整個(gè)Qt模塊(如QtGUI)都include進(jìn)來(lái)。
4. Debug
不得不說(shuō),又是VC贏了。Qt Creator不但速度慢,還經(jīng)常有些莫名其妙的問(wèn)題。你可能會(huì)被要求重新build Debugging Helper。還可能會(huì)出現(xiàn)gdb crash。
5. 幫助
MSDN就不多說(shuō)了。Qt專門有個(gè)Qt Assist程序用于提供所有幫助。Qt Creator中本身也有一個(gè)help模塊。在網(wǎng)絡(luò)上,Qt central提供forum和wiki。但是,如果編程中遇到問(wèn)題,那么你就會(huì)發(fā)現(xiàn),使用Qt的人比起使用VC的人來(lái)少太多了??赡躒C中的一些小問(wèn)題別人早就碰到并在網(wǎng)上公布解決方案了。而Qt中你碰到的問(wèn)題,可能在網(wǎng)上很難找到答案。使用Qt的TX們,大家還要努力豐富開(kāi)源社區(qū)。
6. 如何選擇
如果你只是使用Qt在Windows上開(kāi)發(fā),可以選擇VC2008。Express版本也是免費(fèi)的。
如果你是要開(kāi)發(fā)Cross-platform的程序,還是應(yīng)該選擇Qt Creator。因?yàn)樗赪indows, Linux和Mac上都可以運(yùn)行(MinGW也是Cross-platform的)。所以從平臺(tái)移植和維護(hù)上考慮,可能Qt Creator是個(gè)更好的選擇。另外,我個(gè)人的經(jīng)歷是,從VC6用到2008,經(jīng)常會(huì)碰到VC莫名其妙的退出,有時(shí)代碼還未保存。而在使用Qt Creator的這段時(shí)間里,這種情況從未發(fā)生。相信這也從側(cè)面證明了Qt本身是很健壯的。
一些使用Qt Creator的tip
1. 使用network或opengl或sql等模塊后編譯不通過(guò)
在pro文件中寫如下語(yǔ)句:QT += network 或 QT += opengl 或 QT += sql
2. 代碼自動(dòng)完成功能區(qū)分大小寫
在Tools->Options菜單中的Text Editor->Completion中,勾掉“Case-sensitive completion”,這樣就不會(huì)因?yàn)槟愦笮戝e(cuò)了而使整個(gè)completion都消失掉。
3. Debug時(shí)提示沒(méi)有debug helper
如下圖,在Options菜單中紅圈的位置點(diǎn)擊Rebuild。
4. Qrc中增加了圖片,但是在程序中用不了
Qrc文件中可以增加Qt程序使用的資源文件。這些文件會(huì)被編譯到exe文件中。增加資源時(shí)需要先增加前綴prefix??纯茨愕膒refix寫的對(duì)不對(duì)。如果前綴是“/”那么一個(gè)典型的圖片文件路徑可能是“:/Resources/Images/aaa.png”。另外,在qrc中,文件名和路徑名是區(qū)分大小寫的。我曾經(jīng)在這里卡了好幾個(gè)小時(shí),最后都懷疑Qt Creator是不是“水貨”了。
5. Qt Creator在Windows系統(tǒng)中,怎樣鏈接VC生成的動(dòng)態(tài)鏈接庫(kù)
這個(gè)問(wèn)題曾經(jīng)困擾了我一整天。我想的是按照VC中的方法,增加include文件,增加lib文件,然后編譯即可。誰(shuí)知鏈接時(shí)總是出現(xiàn)問(wèn)題。提示是undefined reference to XXXXX。查了手冊(cè)和網(wǎng)絡(luò),原來(lái)這是mingw用戶在windows上經(jīng)常遇到的問(wèn)題,而且好像至今沒(méi)有完美的解決方案。這個(gè)錯(cuò)誤的起因是因?yàn)閂C生成lib的_stdcall函數(shù)名與mingw生成的不一致。一種解決方案是使用libdll等工具生成新的用于mingw的lib,另一種解決方案是把代碼全拿過(guò)來(lái)重新編譯(汗)。
最后我也不知道為什么自己試出來(lái)一個(gè)新的方法,這個(gè)方法尚未從技術(shù)上找到原因。也未經(jīng)過(guò)廣泛的測(cè)試。有興趣的TX可以試試。
如果你要鏈接到一個(gè)abc.lib文件,頭文件是abc.h,動(dòng)態(tài)鏈接庫(kù)是abc.dll。那么在pro文件中先加入下面一行
INCLUDEPATH += D:/Qt/include
INCLUDEPATH是一個(gè)編譯變量,存儲(chǔ)了所有包含include文件的路徑,這個(gè)目錄下保存了abc.h文件。然后再加入下面一行:
LIBS += D:/Qt/bin/abc.dll
LIBS也是一個(gè)編譯變量,存儲(chǔ)了所有需要鏈接的庫(kù)文件。看清楚了,不是“abc.lib”哦,是“abc.dll”。神奇吧,這樣居然可以鏈接成功了(lib文件可以刪了)。喜歡研究的TX可以研究研究mingw究竟是怎么做的。
6. Qt項(xiàng)目更換文件目錄后編譯失敗
Qt Creator編譯時(shí)不支持中文路徑名。對(duì)于帶空格的路徑,如果你想在pro文件中加入,需要使用$$quote來(lái)指定,如:$$quote(C:/mylibs/extra libs/extra.lib)。另外,如果你習(xí)慣了Windows下‘/’的話,最好改改你的習(xí)慣,在Qt中路徑習(xí)慣用‘/’。
文章標(biāo)題:QtCreator使用技巧
本文網(wǎng)址:http://aaarwkj.com/article40/ipogho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、域名注冊(cè)、動(dòng)態(tài)網(wǎng)站、軟件開(kāi)發(fā)、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)