QtCreator使用技巧

 Qt Creator是Qt官方的IDE,這個IDE為Qt編程人員提供了一個完整的開發(fā)環(huán)境。當(dāng)然了,這個IDE是用Qt寫的,也是免費(fèi)的。這個IDE真正的編譯部分使用了MinGW gcc compiler。也就是說,這個IDE主要的作用是協(xié)助開發(fā)人員編寫代碼,并以更加友好的圖形界面方式(而不是命令行)使用MinGW。下面我以MS Visual Studio作為參照,講一些在Windows平臺上Qt Creator的使用體會與小技巧。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:主機(jī)域名、虛擬主機(jī)、營銷軟件、網(wǎng)站建設(shè)、衡南網(wǎng)站維護(hù)、網(wǎng)站推廣。

 

  1. 1.       工程文件與項(xiàng)目組織結(jié)構(gòu)

 

        VC6之前都是使用dsw文件(之后是sln)來管理軟件工程的(新版的VC提供dsw轉(zhuǎn)換工具),每個dsw中可以有很多dsp,即項(xiàng)目文件。每個dsp中都可以包含任意多的.h.cpp.rc文件,每個dsp都可以單獨(dú)編譯。可以編譯成exe或dll或ocx等等。一個dsw中的所有dsp也可以一起編譯,而且各個dsp之間可以設(shè)定依存關(guān)系。比如一個dsp叫baseui,一個叫myapp。其中baseui將編譯成為baseui.dll,而myapp將編譯成為myapp.exe。在myapp中需要用到baseui中的某個類或某個資源或某個函數(shù),那么myapp的依存關(guān)系中就需要有baseui。設(shè)定好依存關(guān)系后,每次整體編譯之前,baseui就會先于myapp編譯,從而保證myapp需要的lib在編譯之前就已經(jīng)具備。

在Qt Creator中,項(xiàng)目的組織文件是pro類型,它并不具備dsw, dsp那樣的2級結(jié)構(gòu)。它跟dsw或dsp文件一樣,也是機(jī)器生成的文本文件。不過在Qt Creator中,你可能經(jīng)常需要手動去編輯這個文件。下面是一個簡單的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是庫文件(可以使dll,也可以使使用靜態(tài)鏈接的庫或是plugin);

“SOURCES”里定義了所有的cpp文件;

“HEADERS”里定義了所有的h文件;

“FORMS”里定義了所有的ui文件(可以在Qt Creator中進(jìn)行可視化編輯的界面類);

這里多說一下,ui文件經(jīng)過qmake之后會生成ui_開頭的一個.h文件,里面由程序自動生成一個新的UI類,類里面把可視化編輯的界面元素都用代碼寫出來。在ui文件對應(yīng)的類中,這個自動生成的ui類會被new一個新的實(shí)例,用于協(xié)助開發(fā)人員。

不知道我說明白了沒有,就是ui文件會幫助開發(fā)人員生成一些界面相關(guān)的代碼,然而這些代碼是以另一個新的類的成員變量及代碼的形式被用于原來那個界面類的。(汗啊,我都說累了)我一直不明白為什么Qt Creator不像VC那樣直接去修改原有類的代碼。難道這個實(shí)現(xiàn)起來很困難嗎?我打開.ui文件看過,它其實(shí)是界面的一個xml文件描述。忘記在哪里看到這種實(shí)現(xiàn)有一個優(yōu)點(diǎn)就是如果程序界面部分寫的足夠靈活的話,程序升級時如果只涉及到界面,那么可以只下載這個ui文件進(jìn)行升級即可。這個特性可能會讓那些saas軟件開發(fā)人員欣喜若狂。但對于大部分desktop app開發(fā)人員來說,還是有點(diǎn)讓人迷惑。好在Qt中有signal/slot可用于widget與界面類(如dialog)之間傳遞消息,否則這種中間加一層“假父類”的實(shí)現(xiàn)方式是在是讓人難以接受。

Pro文件說了這么多,足以說明Qt Creator在項(xiàng)目管理與設(shè)置上并不是特別友好。與VC(甚至VC6)相比都有較大差距。編輯pro文件使我想起了N年前使用命令行方式編寫turbo C程序。呵呵,可能開源軟件就是這個范兒?

關(guān)于pro文件,還有很多內(nèi)容需要開發(fā)人員去了解。我會專門寫個tip。

 

  1. 2.       IDE界面

        VC的界面很經(jīng)典,多年未發(fā)生根本性的改變(但相信很多老VCer對VC6以后的版本取消Class Wizard仍然耿耿于懷)。

        Qt Creator界面比較一般。硬傷是沒有類樹(Class Tree),這個對于OOP來說非常的不便。由于沒有類樹,開發(fā)人員便不能對類進(jìn)行相關(guān)的編碼,這就意味著增加一個member function需要在該類的.h和.cpp文件中手工輸入兩次函數(shù)名稱。同時,重載函數(shù)時也需比在VC中付出更多的時間。雖然增加一個函數(shù)的時間可能只增加5-10秒,但對于剛剛靈感閃現(xiàn)的程序員來說,可能會比較有挫折感。希望后面的版本能夠加上。

    代碼輸入界面Qt Creator做得不錯,語法著色(不光有標(biāo)準(zhǔn)C++的著色,還有Qt特有關(guān)鍵字的著色,如SLOT等)和類似VC的intellisense功能(代碼自動完成)讓人感覺很舒服。我記得前段時間看VC Team的BLOG還有人留言說intellisense很多問題。在我使用Qt Creator的這兩個月時間里,還沒發(fā)現(xiàn)bug。但是我一直覺得Visual Assist的功能做的最專業(yè)。使用VA的同學(xué)請舉手。

 

  1. 3.       編譯

    在編譯速度上,VC全勝??斓貌恢灰稽c(diǎn)點(diǎn)。當(dāng)然qmake本身會多占用一些時間,但還是能明顯感覺到VC快很多。

    在編譯代碼質(zhì)量上,我是門外漢,不敢妄下結(jié)論。但我感覺Qt生成的exe文件會更大一些,不知是不是為性能做的犧牲。所以TX門寫代碼時,千萬不要圖省事,把整個Qt模塊(如QtGUI)都include進(jìn)來。

 

  1. 4.       Debug

    不得不說,又是VC贏了。Qt Creator不但速度慢,還經(jīng)常有些莫名其妙的問題。你可能會被要求重新build Debugging Helper。還可能會出現(xiàn)gdb crash。

 

  1. 5.       幫助

        MSDN就不多說了。Qt專門有個Qt Assist程序用于提供所有幫助。Qt Creator中本身也有一個help模塊。在網(wǎng)絡(luò)上,Qt central提供forum和wiki。但是,如果編程中遇到問題,那么你就會發(fā)現(xiàn),使用Qt的人比起使用VC的人來少太多了。可能VC中的一些小問題別人早就碰到并在網(wǎng)上公布解決方案了。而Qt中你碰到的問題,可能在網(wǎng)上很難找到答案。使用Qt的TX們,大家還要努力豐富開源社區(qū)。

 

  1. 6.       如何選擇

    如果你只是使用Qt在Windows上開發(fā),可以選擇VC2008。Express版本也是免費(fèi)的。

    如果你是要開發(fā)Cross-platform的程序,還是應(yīng)該選擇Qt Creator。因?yàn)樗赪indows, Linux和Mac上都可以運(yùn)行(MinGW也是Cross-platform的)。所以從平臺移植和維護(hù)上考慮,可能Qt Creator是個更好的選擇。另外,我個人的經(jīng)歷是,從VC6用到2008,經(jīng)常會碰到VC莫名其妙的退出,有時代碼還未保存。而在使用Qt Creator的這段時間里,這種情況從未發(fā)生。相信這也從側(cè)面證明了Qt本身是很健壯的。

 

一些使用Qt Creator的tip

 

  1. 1.       使用network或opengl或sql等模塊后編譯不通過

在pro文件中寫如下語句:QT += network 或 QT += opengl 或 QT += sql

 

  1. 2.       代碼自動完成功能區(qū)分大小寫

在Tools->Options菜單中的Text Editor->Completion中,勾掉“Case-sensitive completion”,這樣就不會因?yàn)槟愦笮戝e了而使整個completion都消失掉。

 

  1. 3.       Debug時提示沒有debug helper

如下圖,在Options菜單中紅圈的位置點(diǎn)擊Rebuild。

 

  1. 4.       Qrc中增加了圖片,但是在程序中用不了

Qrc文件中可以增加Qt程序使用的資源文件。這些文件會被編譯到exe文件中。增加資源時需要先增加前綴prefix。看看你的prefix寫的對不對。如果前綴是“/”那么一個典型的圖片文件路徑可能是“:/Resources/Images/aaa.png”。另外,在qrc中,文件名和路徑名是區(qū)分大小寫的。我曾經(jīng)在這里卡了好幾個小時,最后都懷疑Qt Creator是不是“水貨”了。

 

  1. 5.       Qt Creator在Windows系統(tǒng)中,怎樣鏈接VC生成的動態(tài)鏈接庫

這個問題曾經(jīng)困擾了我一整天。我想的是按照VC中的方法,增加include文件,增加lib文件,然后編譯即可。誰知鏈接時總是出現(xiàn)問題。提示是undefined reference to XXXXX。查了手冊和網(wǎng)絡(luò),原來這是mingw用戶在windows上經(jīng)常遇到的問題,而且好像至今沒有完美的解決方案。這個錯誤的起因是因?yàn)閂C生成lib的_stdcall函數(shù)名與mingw生成的不一致。一種解決方案是使用libdll等工具生成新的用于mingw的lib,另一種解決方案是把代碼全拿過來重新編譯(汗)。

最后我也不知道為什么自己試出來一個新的方法,這個方法尚未從技術(shù)上找到原因。也未經(jīng)過廣泛的測試。有興趣的TX可以試試。

如果你要鏈接到一個abc.lib文件,頭文件是abc.h,動態(tài)鏈接庫是abc.dll。那么在pro文件中先加入下面一行

INCLUDEPATH += D:/Qt/include

INCLUDEPATH是一個編譯變量,存儲了所有包含include文件的路徑,這個目錄下保存了abc.h文件。然后再加入下面一行:

LIBS += D:/Qt/bin/abc.dll

LIBS也是一個編譯變量,存儲了所有需要鏈接的庫文件。看清楚了,不是“abc.lib”哦,是“abc.dll”。神奇吧,這樣居然可以鏈接成功了(lib文件可以刪了)。喜歡研究的TX可以研究研究mingw究竟是怎么做的。

 

  1. 6.       Qt項(xiàng)目更換文件目錄后編譯失敗

Qt Creator編譯時不支持中文路徑名。對于帶空格的路徑,如果你想在pro文件中加入,需要使用$$quote來指定,如:$$quote(C:/mylibs/extra libs/extra.lib)。另外,如果你習(xí)慣了Windows下‘/’的話,最好改改你的習(xí)慣,在Qt中路徑習(xí)慣用‘/’。

文章標(biāo)題:QtCreator使用技巧
本文網(wǎng)址:http://bm7419.com/article40/ipogho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)域名注冊、動態(tài)網(wǎng)站軟件開發(fā)、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作