Qt Creator基本使用方法
Qt的學(xué)習(xí)資料參照這篇良心文檔,感謝奇先生的工作:https://qtguide.ustclug.org/
在 Qt Creator 誕生之前, Qt 程序可以通過 qmake 命令行編譯或者像上一節(jié)手動(dòng)輸入 g++ 命令編譯,在 Linux 平臺(tái)還有 KDevelop 這類 KDE 桌面程序開發(fā)環(huán)境(一般用 cmake 生成腳本)。在 Qt 被諾基亞收購之前,Qt 官方一直沒有有自己的集成開發(fā)環(huán)境,諾基亞收購之后,力推了 Qt 自己的集成開發(fā)環(huán)境,就是 Qt Creator,這為 Qt 開發(fā)帶來很大的方便。
如今 Qt Creator 功能十分強(qiáng)大了,包含項(xiàng)目模板生成、代碼編輯、UI 設(shè)計(jì)、QML 界面編輯、調(diào)試程序、上下文幫助等豐富功能,而且支持手機(jī)平板設(shè)備、嵌入式設(shè)備等程序的開發(fā)調(diào)試。 本節(jié)通過一個(gè)簡(jiǎn)單例子展示 Qt Creator 的代碼編輯和 UI 編輯功能。Qt 程序調(diào)試和 Qt 幫助系統(tǒng)在后續(xù)章節(jié)講解。
1.Qt Creator 界面概覽
從開始菜單打開 QtCreator 集成開發(fā)環(huán)境,啟動(dòng)之后看到類似下面的界面:
QtCreator 里面最上方的是菜單欄,最左邊的是一排功能按鈕。左邊按鈕上半部分是 QtCreator 工作模式選擇,共有七種工作模式:歡迎、編輯(編寫代碼)、設(shè)計(jì)(GUI可視化編輯)、Debug(調(diào)試程序)、項(xiàng)目(項(xiàng)目參數(shù)配置)、分析(程序執(zhí)行效率分析)、幫助。 左邊按鈕下面四個(gè)是構(gòu)建調(diào)試區(qū),由上到下依次是Qt套件選擇、運(yùn)行、調(diào)試運(yùn)行和構(gòu)建。左邊的設(shè)計(jì)按鈕、項(xiàng)目按鈕和構(gòu)建調(diào)試區(qū)只有在打開或新建了項(xiàng)目之后才會(huì)變得可 用。
QtCreator 下方的是定位工具和輸出面板,在編寫項(xiàng)目代碼和運(yùn)行、調(diào)試程序時(shí)會(huì)使用到。輸出面板包括七個(gè):問題(項(xiàng)目構(gòu)建時(shí)的問題)、Search Results(搜索項(xiàng)目文件內(nèi)容)、應(yīng)用程序輸出(運(yùn)行和調(diào)試信息顯示)、編譯輸出(編譯、鏈接命令及其輸出信息)、QML/JS Console(QML 命令窗口)、概要信息(項(xiàng)目信息摘要)、Version Control(版本控制系統(tǒng))。
QtCreator 中間的區(qū)域是所選擇的工作模式界面,默認(rèn)是歡迎模式。歡迎模式有三個(gè)子功能,第一個(gè) Project 是項(xiàng)目顯示,包括之前的會(huì)話和項(xiàng)目記錄。項(xiàng)目記錄比較好理解,而會(huì)話涵蓋內(nèi)容比較廣,一個(gè)會(huì)話可以是多個(gè)項(xiàng)目的列表,并含有它們的配置以及上次編輯位置記錄、調(diào)試 斷點(diǎn)等等。會(huì)話記錄 的上方是新建項(xiàng)目的快捷按鈕,項(xiàng)目記錄的上方是打開項(xiàng)目的快捷按鈕。歡迎模式另外兩個(gè)子功能是瀏覽 Qt 庫自帶的示例和教程,感興趣的讀者可以自行打開看看。
2. 新建項(xiàng)目
接下來我們新建一個(gè) HelloCreator 項(xiàng)目,看看 QtCreator 集成開發(fā)環(huán)境新建的窗體項(xiàng)目。打開 QtCreator 文件菜單,點(diǎn)擊“新建 文件或項(xiàng)目”(快捷鍵 Ctrl+N),或者直接在歡迎模式點(diǎn)擊快捷按鈕“New Project”,都可以打開如下所示的新建項(xiàng)目對(duì)話框:
新建項(xiàng)目對(duì)話框里有五類項(xiàng)目模板:
- Application:Qt 應(yīng)用程序,包括普通窗體程序和 QtQuick 程序。
- Library:可以創(chuàng)建動(dòng)態(tài)庫、靜態(tài)庫以及 QtQuick 擴(kuò)展插件、QtCreator 自身插件。
- 其他項(xiàng)目:可以創(chuàng)建單元測(cè)試項(xiàng)目、Qt4 設(shè)計(jì)師自定義控件、子目錄項(xiàng)目等。
- 非 Qt 項(xiàng)目:可以創(chuàng)建純 C 或 純 C++ 項(xiàng)目。
- 導(dǎo)入項(xiàng)目:從版本控制系統(tǒng)管理的軟件項(xiàng)目導(dǎo)入舊的項(xiàng)目。
本教程常用的只有第一類 Application。在 Qt 應(yīng)用程序里有四個(gè)子模板:
- Qt Widgets Application:普通窗體模板,傳統(tǒng)基于部件的窗體界面程序。
- Qt Quick Application:使用 QtQuick 設(shè)計(jì)界面的應(yīng)用程序,編譯得到二進(jìn)制可執(zhí)行程序。
- Qt 控制臺(tái)應(yīng)用:因?yàn)?Qt 主要用于圖形界面設(shè)計(jì),這個(gè)控制臺(tái)項(xiàng)目模板基本不用的。
- Qt Quick UI:使用 QtQuick 設(shè)計(jì)的界面文件 *.qml ,項(xiàng)目不需要編譯,而是使用 qmlscene 工具預(yù)覽界面。
本教程使用第一個(gè)子模板 Qt Widgets Application,開發(fā)普通的 Qt 窗體應(yīng)用程序。選擇該項(xiàng)目模板,點(diǎn)擊對(duì)話框下方的“Choose…”按鈕,進(jìn)入 Qt Widgets Application 項(xiàng)目新建的向?qū)Ы缑?#xff1a;
將項(xiàng)目名稱設(shè)置為 hellocreator ,創(chuàng)建路徑設(shè)置為 D:\QtProjects\ch02,點(diǎn)擊“下一步”,進(jìn)入“Kit Selection”界面:
這一步是為 hellocreator 設(shè)置 Qt 套件(Qt Kits),默認(rèn)只有第一個(gè)“Desktop Qt 5.4.0 MinGW 32bit”,如果安裝配置了多個(gè) Qt 套件,就可以都選上。Qt 套件是指 Qt 程序從編譯鏈接到運(yùn)行環(huán)境的全部工具和 Qt 類庫的集合,對(duì)于 MinGW 版本 Qt 程序生成和調(diào)試,至少需要 MinGW 中的編譯器 g++(自動(dòng)調(diào)用鏈接器)、g++ 配套的基礎(chǔ)庫、調(diào)試器 gdb 還有使用 MinGW 環(huán)境編譯而成的 Qt 類庫自身。默認(rèn)情況下,在上面 Kit Selection 里選中全部套件,然后點(diǎn)擊“下一步”,進(jìn)入“類信息”設(shè)置界面:
在類信息設(shè)置界面,最關(guān)鍵的是基類的選擇,目前是三種基類: - QMainWindow:基于主窗口類的程序,一般用于較為復(fù)雜的應(yīng)用程序,除了中央客戶區(qū)界面,還可以包括菜單欄、工具欄、狀態(tài)欄以及多個(gè)可停靠的 工具對(duì)話框等等。
- QWidget:最簡(jiǎn)單最基本的窗體程序,里面可以放置多個(gè)控件實(shí)現(xiàn)程序功能。
- QDialog:基于對(duì)話框的程序,對(duì)話框一般用于彈窗,也可以用于主界面顯示。對(duì)話框是從 QWidget 繼承而來的,并豐富了一些功能,如模態(tài)顯示和返回值等。
我們當(dāng)然從最簡(jiǎn)單的學(xué)起,在基類里選擇 QWidget ,類名和文件名會(huì)根據(jù)基類自動(dòng)修改,不需要額外設(shè)置。點(diǎn)擊“下一步”,進(jìn)入“項(xiàng)目管理”界面:
在項(xiàng)目管理界面可以設(shè)置作為子項(xiàng)目,以及加入版本控制系統(tǒng)管理。這兩個(gè)功能暫時(shí)用不到,都用默認(rèn)的 ,然后點(diǎn)擊 “完成”。
項(xiàng)目創(chuàng)建完成之后,QtCreator 會(huì)直接進(jìn)入代碼編輯模式,可以看到類似下圖界面:
編輯模式左邊豎排的兩個(gè)窗口叫做“邊欄”,上面的默認(rèn)是項(xiàng)目文件管理窗口,下面的是打開文件列表窗口。在 QtCreator 菜單“控件”–>“顯示邊欄 Alt+0”,可以控制邊欄的顯示和隱藏。邊欄里的窗口數(shù)目可以增加,邊欄子窗口標(biāo)題欄(其實(shí)是工具條,長得像標(biāo)題欄,姑且這么稱呼)有一排小按鈕,最右邊的是關(guān) 閉按鈕,倒數(shù)第二個(gè)是增加分欄按鈕,可以添加多個(gè)邊欄子 窗口。邊欄子窗口標(biāo)題欄第一個(gè)控件是組合框,可以選擇該子窗口的功能視圖類型,目前可以選擇 8 個(gè)視圖類型:
- 項(xiàng)目:即項(xiàng)目文件管理視圖,可以選擇項(xiàng)目里的文件進(jìn)行編輯,包括 pro 文件也可以手動(dòng)編輯。
- 打開文檔:當(dāng)前已經(jīng)打開的文件列表,文件名右邊如果有 * 號(hào),是該文件被修改了但尚未保存。
- 書簽:右擊代碼編輯器行號(hào)位置,看到“切換書簽”,可以給代碼行添加書簽,方便跳轉(zhuǎn)到該位置。
- 文件系統(tǒng):相當(dāng)于系統(tǒng)里的文件資源管理器,可以查看項(xiàng)目文件夾在磁盤里的實(shí)際文件列表。
- 類視圖:可以查看項(xiàng)目里包含的類及相應(yīng)源代碼文件里的成員函數(shù)、成員變量。
- 大綱:編輯器所顯示的當(dāng)前文件的大綱列表,如名字空間、類名、成員函數(shù)、成員變量等。
- 類型層次:當(dāng)前項(xiàng)目包含的類及其基類、派生類列表。
- Include Hierarchy:包含視圖,顯示當(dāng)前項(xiàng)目里?.h 、.cpp 以及 Qt 類庫頭文件之間的包含關(guān)系。
可見 QtCreator 提供的功能視圖是很豐富的,這些視圖不需要死記硬背,只要知道大概有這些東西,以后需要的時(shí)候會(huì)調(diào)出來就行了。一般用頭兩個(gè)就差不多 了,當(dāng)然也可以建立多個(gè)分欄,啟用 其他功能視圖。邊欄介紹到這里,再看看右邊的代碼編輯器:
代碼編輯器大致可以分為三個(gè)部分,帶有一堆控件的標(biāo)題欄(其實(shí)是工具條)、行首區(qū)和編輯區(qū)。先看看標(biāo)題欄的10個(gè)控件,這些東西不需要記,因?yàn)榇蜷_ QtCreator 的時(shí)候,這些東西都在那里,用鼠標(biāo)指向這些控件幾秒鐘,會(huì)自動(dòng)顯示這些控件的工具提示信息,這里將它們羅列出來,方便讀者以后查閱而已:
- ①和②:導(dǎo)航按鈕“返回”和“前進(jìn)”,這與網(wǎng)頁瀏覽器的前進(jìn)和后退按鈕類似,可以在之前瀏覽的多個(gè)代碼文件或一個(gè)代碼文件里多個(gè)位置之間快速切換。
- ③:標(biāo)識(shí)當(dāng)前顯示的文件是只讀還是可寫,一般都是可寫的。
- ④:文件類型圖標(biāo),當(dāng)前顯示文件的類型,這個(gè)控件其實(shí)是一個(gè)菜單按鈕,點(diǎn)擊可以彈出豐富的文件處理功能菜單,感興趣的讀者可以點(diǎn)開看看。
- ⑤:打開的文件名,可以在多個(gè)打開的文件之間選擇切換,與邊欄的“打開文檔”視圖是對(duì)應(yīng)的。
- ⑥:關(guān)閉當(dāng)前顯示的文檔。
- ⑦:選擇符號(hào),可以在當(dāng)前顯示的文件里多個(gè)函數(shù)、類、成員變量等之前快速切換,與邊欄“大綱”視圖是對(duì)應(yīng)的。
- ⑧:為當(dāng)前顯示的文件添加額外的C++預(yù)處理指令,一般用不著。
- ⑨:編輯區(qū)光標(biāo)的行號(hào)和列號(hào)。
- ⑩:代碼編輯區(qū)分欄,可以增加多個(gè)編輯器窗口,顯示多個(gè)打開的文檔或顯示較大源碼文件的多個(gè)位置。
行首區(qū)是淺灰色背景的部分,主要用來顯示代碼行號(hào),以及調(diào)試斷點(diǎn)標(biāo)志和代碼書簽標(biāo)志。右擊行首區(qū)可以彈出右鍵菜單,菜單里可以切換書簽、編輯書簽以及設(shè)置或取消斷 點(diǎn)。同一行是既可以打斷點(diǎn)也可以設(shè)置書簽的,二者不沖突,其實(shí)它們根本就沒關(guān)系。單擊行號(hào)前面的淺灰色空白區(qū)可以直接打斷點(diǎn),再次單擊可以取消斷點(diǎn),另外也可以用 快捷鍵 F9 設(shè)置或取消斷點(diǎn)。代碼書簽一般用右鍵菜單來設(shè)置,也可以用快捷鍵 Ctrl+M 設(shè)置或取消書簽。
編輯區(qū)是程序員最為常用的部分了,就是寫代碼用的。編輯區(qū)當(dāng)然有語法高亮顯示了,而且從編輯區(qū)的復(fù)制出來的內(nèi)容是 HTML 語法的豐富文本格式,如果粘貼到 Word 之類的文字處理軟件中,會(huì)直接顯示彩色高亮代碼,這是很實(shí)用的功能。
對(duì)于現(xiàn)代集成開發(fā)環(huán)境常見的變量名、類名、名字空間、函數(shù)名、類對(duì)象成員變量、結(jié)構(gòu)體成員變量等等名字補(bǔ)全功能,QtCreator 編輯器當(dāng)然也能很好地支持。變量/函數(shù)調(diào)用追蹤、變量/函數(shù)聲明追蹤、類名或變量名函數(shù)名自動(dòng)改名等常見的輔助功能,也都是支持的(選擇要改或要追蹤的名字,右擊,在右鍵 菜單里有一大堆功能,Refactor菜單項(xiàng)里面有自動(dòng)改名)。QtCreator 的編輯模式就介紹這么多,接下來看看圖形界面可視化設(shè)計(jì)。
3.UI 編輯
在 QtCreator 編輯模式邊欄上面的項(xiàng)目視圖里,包含一個(gè)?hellocreator.pro?項(xiàng)目文件和頭文件、源文件、界面文件三個(gè)虛擬目錄。這三個(gè)虛擬目錄是項(xiàng)目里對(duì)文件類型的歸類顯示,widget.h 和 main.cpp、widget.cpp 三個(gè)代碼文件在后續(xù)小節(jié)講解,本小節(jié)先設(shè)計(jì)圖形界面。點(diǎn)開界面文件目錄,可以看到 widget.ui :
雙擊 widget.ui 文件,QtCreator 會(huì)自動(dòng)進(jìn)入設(shè)計(jì)模式,可以對(duì)圖形界面進(jìn)行可視化編輯:
這個(gè)設(shè)計(jì)模式界面和上一節(jié)的 Qt 設(shè)計(jì)師是完全類似的,而且這就是將設(shè)計(jì)師的功能做成插件,集成到 QtCreator 了。 當(dāng)然設(shè)計(jì)師變成插件之后,和原來的獨(dú)立設(shè)計(jì)師程序有區(qū)別,現(xiàn)在插件設(shè)計(jì)師自己的菜單集成到 QtCreator 菜單工具–>Form Editor 級(jí)聯(lián)菜單里。預(yù)覽窗口需要點(diǎn)擊菜單工具–>Form Editor–>預(yù)覽。還有一個(gè)重要的變化是窗體編輯區(qū)的右鍵菜單里,多了“轉(zhuǎn)到槽…”,這個(gè)在講過信號(hào)和槽一章之后會(huì)經(jīng)常用到。
與上一節(jié)類似的,拖一個(gè) Label 標(biāo)簽控件到窗體編輯區(qū)里,然后同上一節(jié)設(shè)置標(biāo)簽控件的 geometry 的四個(gè)子屬性: X 為 10,Y 為 10,寬度為 200,高度為 40。接著編輯標(biāo)簽控件的 text 屬性為 <h1.> Hello Creator!<./h1> ,看到效果如下:
上一節(jié)使用了 Qt 樣式表(Qt Style Sheets,通常縮寫成 QSS)更改了標(biāo)簽控件的前景色和背景色,通過標(biāo)簽控件的 setStyleSheet 函數(shù)實(shí)現(xiàn)的。其實(shí)不僅可以用 C++ 代碼設(shè)置樣式表,獨(dú)立的設(shè)計(jì)師程序或 QtCreator 的設(shè)計(jì)師插件還可以直接編輯標(biāo)簽控件的 styleSheet 屬性實(shí)現(xiàn)可視化地編輯樣式表。
按如下操作示范:選擇 label 控件,右邊屬性編輯窗口里,找到 styleSheet 屬性,點(diǎn)擊進(jìn)入該屬性的編輯框:
找到編輯框右邊的 “…” 按鈕,點(diǎn)開來,看到樣式表編輯對(duì)話框:
“編輯樣式表”對(duì)話框上方是四個(gè)按鈕,點(diǎn)擊按鈕會(huì)顯示如上圖中的菜單。“添加資源”是給控件添加前景圖、背景圖、邊框圖等。“添加漸變”和“添加顏色”功能類似, 可以為控件設(shè)置各種樣式的漸變色。“添加顏色”是給控件添加前景色 color、背景色 background-color、邊框色 border-color 等等。點(diǎn)擊“添加字體”會(huì)彈出字體設(shè)置對(duì)話框,可以改變控件顯示文字的字體、字號(hào)、粗體等效果。這里可以簡(jiǎn)單添加一個(gè)前景色 color 和 背景色 background-color ,兩個(gè)顏色讀者可以隨意設(shè)置。重要的是學(xué)會(huì)設(shè)置樣式表顏色,至于顏色本身不重要。添加好 color 和 background-color 之后,點(diǎn)擊下方的“OK” 按鈕,在編輯樣式表對(duì)話框關(guān)閉之后就會(huì)查看效果,類似下圖所示:
如果多次設(shè)置了前景色 color ,那么該對(duì)話框里會(huì)有多個(gè) color 行,實(shí)際顯示時(shí)按照最后一行的顏色顯示,其他顏色設(shè)置也是類似的。如果要取消已設(shè)置的顏色,只需刪除該對(duì)話框中間文本框里相應(yīng)的文本行即可,比如刪除上面的 background-color 一行(行尾是以 ; 結(jié)束),然后添加漸變背景色如彩虹色 Rainbow :
注意,要點(diǎn)擊“OK”按鈕關(guān)閉對(duì)話框之后,效果才會(huì)顯示出來。上圖是設(shè)置好之后,重新打開編輯樣式表對(duì)話框,方便截圖給讀者看的。設(shè)置好前景色紅色和背景色彩虹漸 變色之后,可以按快捷鍵 Alt+Shift+R 預(yù)覽效果,這里就不截圖了。快捷鍵 Ctrl+S 是保存編輯過的文件,編輯代碼或設(shè)計(jì) UI 時(shí)要注意保存文件。樣式表的可視化編輯介紹到這,下一小節(jié)講解代碼。
4.代碼講解
點(diǎn)擊 QtCreator 左側(cè)“編輯”,回到代碼編輯模式,可以看到 widget.ui 的 XML 代碼:
ui 文件一般只在設(shè)計(jì)模式用設(shè)計(jì)師插件來編輯,不要手動(dòng)修改 XML 代碼(ui 文件里的 XML 代碼就不講解了)。里面遵守嚴(yán)格的 XML 語法格式,改錯(cuò)了就難以正確生成圖形界面了,設(shè)計(jì)好界面之后保存了就可以關(guān)閉 ui 文件。如果希望繼續(xù)編輯圖形界面就點(diǎn)擊上圖中的“Switch Mode”。下次希望修改 ui 文件的話,就在項(xiàng)目視圖雙擊打開 ui 文件,會(huì)自動(dòng)進(jìn)入設(shè)計(jì)模式。
現(xiàn)在來看編輯模式邊欄的項(xiàng)目視圖,點(diǎn)開頭文件、源文件、界面文件三個(gè)虛擬目錄,可以看到 widget.h 、main.cpp、widget.cpp 、widget.ui ,還有?hellocreator.pro?項(xiàng)目文件,這個(gè)項(xiàng)目必要的代碼文件就這五個(gè),項(xiàng)目視圖里三個(gè)目錄是虛擬的,但這五個(gè)文件都是真實(shí)的,就在 D:\QtProjects\ch02\hellocreator 文件夾里。
首先來看看 widget.h :
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
開頭定義的 WIDGET_H 宏是防止重復(fù)包含,保證頭文件只會(huì)被包含一次。接下來是包含了基類頭文件 。
然后看到下面的聲明:
- 1
- 2
- 3
這句是前向聲明,表示 Ui 名字空間里有一個(gè)叫 Widget 的類,Ui::Widget 類就是在生成項(xiàng)目時(shí),用 uic 工具編譯 widget.ui 得到的 ui_widget.h 里的輔助構(gòu)建界面類的名字。使用前向聲明配合后續(xù)定義的類成員指針(Ui::Widget *ui),就可以方便地使用輔助構(gòu)建界面類 Ui::Widget,而不需要在頭文件里包含 ui_widget.h。
接著是類定義:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
這幾句定義了全局類 Widget ,和 Ui::Widget 有重名,但有名字空間前綴區(qū)別。在 Ui 名字空間里的是輔助構(gòu)建界面的類。不帶名字空間前綴的是全局類,從 QWidget 繼承而來,這是真正的窗口類,類定義開頭必須要有 Q_OBJECT 宏以支持元對(duì)象系統(tǒng)。類里面接下來是全局類 Widget 的構(gòu)造函數(shù)和析構(gòu)函數(shù),都是 public 類型。explicit 關(guān)鍵字是強(qiáng)調(diào)必須顯式構(gòu)造該類對(duì)象,不使用隱式轉(zhuǎn)換間接生成該類的對(duì)象。構(gòu)造函數(shù)里的參數(shù)只有父類對(duì)象指針,默認(rèn)的 0 (NULL)代表沒有父窗口,也就是以操 作系統(tǒng)桌面為父窗口的意思。
類定義里最后一行定義了 Ui::Widget 類的指針,這時(shí)還沒有創(chuàng)建實(shí)際的輔助構(gòu)建類的對(duì)象,指針目前沒有初始化,只是起到占位的作用,以后才會(huì)給它賦值。
接下來看看全局類 Widget 的實(shí)體代碼文件 widget.cpp :
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
widget.cpp 不僅要包含 widget.h ,還要包含生成項(xiàng)目過程中出現(xiàn)的 ui_widget.h ,因?yàn)樵?widget.cpp 文件里需要構(gòu)造 Ui::Widget 類對(duì)象,并且調(diào)用該類對(duì)象的函數(shù)。widget.cpp 里只有兩個(gè)函數(shù),首先來看構(gòu)造函數(shù):
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this); }- 1
- 2
- 3
- 4
- 5
- 6
這個(gè)構(gòu)造函數(shù)第一行是函數(shù)定義,第二行是使用 parent 變量初始化基類 QWidget 的對(duì)象,第三行是用 new 構(gòu)建了一個(gè) Ui::Widget 對(duì)象,并將該對(duì)象指針初始化了私有成員指針 ui 。現(xiàn)在 ui 指針就是指向一個(gè)實(shí)際的輔助構(gòu)建類的對(duì)象。構(gòu)造函數(shù)大括號(hào)的內(nèi)部只有一句,就是調(diào)用 ui 所指對(duì)象的 setupUi 函數(shù),setupUi 函數(shù)會(huì)為 this(就是全局類 Widget 的對(duì)象自己)構(gòu)建圖形界面。如果要使用窗口里的控件,需要以 ui-> 來調(diào)用子控件。
再看看程序入口函數(shù) main.cpp:
#include “widget.h”
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
- 1
}
main 函數(shù)內(nèi)部先定義 Qt 應(yīng)用程序入口,在定義一個(gè)全局類 Widget 的對(duì)象 w,然后顯示 w 對(duì)象。最后是進(jìn)入應(yīng)用程序的事件循環(huán)。對(duì)于普通窗體程序,QtCreator 自動(dòng)生成的 main.cpp 都是這樣的。
講完 *.h 和 *.cpp ,最后來看看 pro 文件的代碼:
#------------------------------------------------- # # Project created by QtCreator 2015-04-08T21:34:09 # #-------------------------------------------------QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsTARGET = hellocreator TEMPLATE = appSOURCES += main.cpp\widget.cppHEADERS += widget.hFORMS += widget.ui- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
井號(hào) # 打頭的是注釋,表明這個(gè) pro 文件是由 QtCreator 創(chuàng)建的,QtCreator 創(chuàng)建的 pro 文件和 qmake 命令創(chuàng)建的 pro 文件有區(qū)別,而且 QtCreator 創(chuàng)建的 pro 文件兼容性更好,所以推薦是用 QtCreator 生成 Qt 項(xiàng)目并編輯和構(gòu)建項(xiàng)目。
QT += core gui- 1
這一句是為項(xiàng)目添加 core (QtCore,核心模塊)和 gui (QtGui,基礎(chǔ)繪圖模塊)兩個(gè) Qt 模塊。
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets- 1
這句是個(gè)判斷句法,如果 Qt 庫的主版本號(hào)大于 4 ,比如 Qt5 ,那就添加新的 Qt 模塊 widgets(QtWidgets,控件和窗口類模塊),如果項(xiàng)目使用的是 Qt4,那么就不添加 widgets 模塊。這句是為了兼容性而設(shè)計(jì)的,Qt4 時(shí)代,它的控件和窗口類集成在 gui 模塊里,在 Qt5 才將 widgets 從 gui 里單獨(dú)分離出來的。
TARGET = hellocreator TEMPLATE = app- 1
- 2
TARGET 是指生成的目標(biāo)程序名字,本項(xiàng)目生成的目標(biāo)名字就是 hellocreator 。TEMPLATE 是指項(xiàng)目生成模板,指明是生成應(yīng)用程序 app 還是庫文件 lib,還有其他類型的生成模板,不常用就不枚舉了。
SOURCES += main.cpp\widget.cpp- 1
- 2
SOURCES 指明項(xiàng)目里的源代碼文件,有 main.cpp 和 widget.cpp ,這個(gè)對(duì)應(yīng)邊欄“項(xiàng)目”視圖里的“源文件”虛擬目錄。main.cpp 行尾的反斜杠 \ 是行拼接的意思,與 C++ 代碼行尾的拼接反斜杠 \ 作用類似。
HEADERS += widget.h- 1
HEADERS 指明項(xiàng)目里的頭文件,有 widget.h ,這個(gè)對(duì)應(yīng)邊欄“項(xiàng)目”視圖里的“頭文件”虛擬目錄。那么 ui_widget.h 跑哪去了?這個(gè)不用擔(dān)心,ui_widget.h 會(huì)在項(xiàng)目生成時(shí),由 Makefile 指定 uic 工具根據(jù) widget.ui 編譯而成,ui_widget.h 屬于項(xiàng)目生成過程中的中間文件,沒必要包含在 pro 文件里,把這些事情交給 Makefile 就行了。
FORMS += widget.ui- 1
FORMS 指明項(xiàng)目里的 *.ui 文件,對(duì)應(yīng)邊欄“項(xiàng)目”視圖里的“界面文件”虛擬目錄。這個(gè)項(xiàng)目里只有一個(gè)主界面 widget.ui,以后會(huì)學(xué)習(xí)到在一個(gè)項(xiàng)目里使用多個(gè) ui 文件,比如一個(gè)主界面配多個(gè)彈出的子對(duì)話框。項(xiàng)目代碼講解先到這里,接下來當(dāng)然是生成該項(xiàng)目的目標(biāo)程序了。
5.程序的生成和運(yùn)行
用集成開發(fā)環(huán)境 QtCreator 編譯生成程序是再簡(jiǎn)單不過的事了。一個(gè)按鈕就夠了。當(dāng)然,得先認(rèn)識(shí)認(rèn)識(shí) QtCreator 左下角的按鈕:
左下角四個(gè)按鈕,第一個(gè)按鈕是選擇構(gòu)建項(xiàng)目使用的 Qt 套件和構(gòu)建目標(biāo)程序的類型(Debug 或 Release)。
第二個(gè)是運(yùn)行按鈕,快捷鍵是 Ctrl+R,如果還沒構(gòu)建項(xiàng)目或剛修改了代碼,直接點(diǎn)擊運(yùn)行的話,QtCreator 會(huì)自動(dòng)構(gòu)建生成新的目標(biāo)程序并運(yùn)行。
第三個(gè)是調(diào)試按鈕,快捷鍵是 F5。調(diào)試程序之前,QtCreator 會(huì)自動(dòng)構(gòu)建生成最新的目標(biāo)程序,并進(jìn)入調(diào)試模式。在下一節(jié)專門講解調(diào)試程序。
第四個(gè)是構(gòu)建按鈕,快捷鍵是 Ctrl+B,只構(gòu)建最新的目標(biāo)程序,但不運(yùn)行。
如果只構(gòu)建而不運(yùn)行程序,就點(diǎn)第四個(gè)。一般都是構(gòu)建后運(yùn)行程序查看效果,可以直接點(diǎn)擊第二個(gè)運(yùn)行按鈕,如果沒問題發(fā)生,就會(huì)顯示目標(biāo)程序主界面:
從編譯生成到運(yùn)行,不需要自己敲命令,一個(gè)按鈕搞定,這就是集成開發(fā)環(huán)境的好處。
上面示范的是默認(rèn) Qt 套件,構(gòu)建的是 Debug 類型的目標(biāo)程序。如果需要構(gòu)建 Release 版目標(biāo)程序,點(diǎn)開左下角第一個(gè)按鈕:
可以選擇 Release 構(gòu)建類型,然后再點(diǎn)擊運(yùn)行按鈕就可以構(gòu)建運(yùn)行 Release 版本目標(biāo)程序。上圖是針對(duì)項(xiàng)目只用到單一 Qt 套件的,如果之前配置了多個(gè) Qt 套件,看到的類似下圖:
select 如果項(xiàng)目配置了多個(gè)可用的 Qt 套件,點(diǎn)開左下角第一個(gè)按鈕后,會(huì)看到各個(gè)套件以及構(gòu)建類型(Debug 和 Release),如果要切換 Qt 套件或構(gòu)建類型,直接選中相應(yīng)條目,然后點(diǎn)擊運(yùn)行按鈕就行了。如果構(gòu)建和運(yùn)行時(shí)沒出錯(cuò),就會(huì)顯示出構(gòu)建好的目標(biāo)程序界面。
從集成開發(fā)環(huán)境構(gòu)建和運(yùn)行程序是很簡(jiǎn)單的事,但這些看起來簡(jiǎn)單的過程背后都發(fā)生了什么呢?
我們點(diǎn)擊 QtCreator 項(xiàng)目模式,可以看到項(xiàng)目配置界面:
在打開具體的項(xiàng)目之后,QtCreator 的項(xiàng)目模式才會(huì)變得可用。對(duì)于打開的項(xiàng)目,比如 hellocreator 項(xiàng)目,可配置的內(nèi)容如上圖頂上面顯示的四大類,有“構(gòu)建和運(yùn)行”、“編輯器”、“代碼風(fēng)格”、“依賴關(guān)系”。最常用的就是“構(gòu)建和運(yùn)行”。在“構(gòu)建和運(yùn)行”配置里面,可以 看到 Qt 套件的名稱,并且可以添加管理 Qt 套件。
對(duì)于每個(gè) Qt 套件,又可以分別配置構(gòu)建時(shí)環(huán)境、命令和運(yùn)行時(shí)環(huán)境、命令。如果需要給生成的可執(zhí)行程序如 *.exe 附加命令參數(shù),那就可以點(diǎn)擊 Qt 套件名稱下方的“運(yùn)行”設(shè)置,給可執(zhí)行程序附加參數(shù)。下面重點(diǎn)關(guān)注“構(gòu)建”設(shè)置。
在“構(gòu)建設(shè)置”里,上方組合框里可以選擇構(gòu)建類型(Debug 或 Release)進(jìn)行分別設(shè)置,并且可以自己添加新的構(gòu)建類型(一般沒必要)。
接下來“概要”里面,QtCreator 默認(rèn)使用影子構(gòu)建方式(Shadow build),這種構(gòu)建項(xiàng)目的方式是將構(gòu)建過程中的中間文件和目標(biāo)程序都放到獨(dú)立的構(gòu)建目錄中,實(shí)現(xiàn)源代碼目錄和構(gòu)建目錄的徹底分離,這對(duì)程序源代碼的發(fā)布很方便,不會(huì)將 構(gòu)建過程中的中間文件混雜進(jìn)來。對(duì)于項(xiàng)目 hellocreator ,它的源代碼路徑是 D:\QtProjects\ch02\hellocreator,而上圖中影子構(gòu)建的目錄是在 D:\QtProjects\ch02\build-hellocreator-Desktop_Qt_5_4_0_MinGW_32bit-Debug,源碼文件夾和構(gòu) 建文件夾都在父文件夾 ch02 里。影子構(gòu)建目錄的命名規(guī)則是:build-項(xiàng)目名-構(gòu)建套件名-構(gòu)建類型 。示范的項(xiàng)目名 hellocreator,套件名 Desktop Qt 5.4.0 MinGW 32bit,構(gòu)建類型為 Debug,合成之后的構(gòu)建目錄里不能帶空格,所以把空格都換成下劃線,得到 build-hellocreator-Desktop_Qt_5_4_0_MinGW_32bit-Debug 。項(xiàng)目構(gòu)建時(shí)生成的中間文件和最終的目標(biāo)程序都可以在影子構(gòu)建目錄里找到。
接著是“構(gòu)建步驟”,上一節(jié)提過 qmake 編譯程序的三板斧,因?yàn)?pro 文件已經(jīng)由 QtCreator 生成好了,所以這時(shí)候編譯程序只需要剩下的兩板斧:①用 qmake 生成 Makefile 到構(gòu)建目錄;②在構(gòu)建目錄里面執(zhí)行 make (mingw32-make) 。對(duì)于這兩板斧的細(xì)節(jié)可以點(diǎn)開 qmake 和 Make 兩行右邊的詳情進(jìn)行查看,這里不額外截圖了,僅解釋一下上圖中 qmake 命令的選項(xiàng)參數(shù):
- -r 選項(xiàng)是指遞歸檢查項(xiàng)目文件夾的意思;
- -spec win32-g++ 選項(xiàng)參數(shù)是指使用 win32-g++ 定制腳本來生成 Makefile,對(duì)于不同的編譯器和操作系統(tǒng)平臺(tái)會(huì)使用不同的定制腳本,win32-g++ 是專門針對(duì) Windows 系統(tǒng) MinGW 編譯環(huán)境的定制腳本(實(shí)際的定制腳本位于 QTDIR/mkspecs/win32-g++ 文件夾里);
- “CONFIG+=debug” 是指生成 debug 類型的目標(biāo)程序,對(duì)于優(yōu)化發(fā)行版,對(duì)應(yīng)的就是 “CONFIG+=release”,如果這兩個(gè) CONFIG 都不加,那么默認(rèn)生成 release 類型的目標(biāo)程序。
QtCreator 項(xiàng)目模式暫時(shí)介紹這些,接下來我們看看關(guān)于項(xiàng)目構(gòu)建和項(xiàng)目運(yùn)行時(shí)的實(shí)際情況。回到 QtCreator 編輯模式,點(diǎn)擊最下面一排輸出面板里 的“編譯輸出”面板,可以看到生成項(xiàng)目過程中的編譯、鏈接命令:
QtCreator 實(shí)際使用的編譯鏈接命令比我們上一節(jié)的編譯鏈接命令復(fù)雜太多了,上一節(jié)使用的是極度精簡(jiǎn)的命令。如果項(xiàng)目的編譯鏈接沒有出問題,不用太在意“編譯輸出”面板里的東西,如果 編譯鏈接過程出錯(cuò)了,就需要查看“編譯輸出”面板里的問題了。雖然 QtCreator 編譯鏈接命令復(fù)雜,但大致過程和上一節(jié)最后那張生成過程圖是類似的。“編譯輸出”面板里的命令這里不介紹了,對(duì)于初學(xué)者來說不用管的,反正是自動(dòng)生成的,現(xiàn)在不用操心這么 復(fù)雜的事情。
與“編譯輸出”面板相比,“應(yīng)用程序輸出”面板更為常用,對(duì)于調(diào)試信息的輸出、打印到命令行的輸出等,QtCreator 都會(huì)捕捉到,并顯示到“應(yīng)用程序輸 出”面板,如下圖所示:
“應(yīng)用程序輸出”面板標(biāo)題欄位置還有些小按鈕,感興趣的讀者可以自己試試,有清空輸出內(nèi)容、重新運(yùn)行程序、停止當(dāng)前運(yùn)行程序之類快捷功能。
最后說明一下目標(biāo)程序的運(yùn)行環(huán)境,如果希望從集成開發(fā)環(huán)境為生成的目標(biāo)程序加命令行參數(shù),那么需要用到項(xiàng)目模式的“運(yùn)行設(shè)置”:
在項(xiàng)目模式,點(diǎn)擊上面各個(gè)構(gòu)建套件的“運(yùn)行”,就會(huì)進(jìn)入運(yùn)行配置界面,可以看到上圖幾個(gè)關(guān)鍵的路徑和參數(shù)設(shè)置:
①Executable:可執(zhí)行程序路徑,或叫目標(biāo)程序路徑,生成的 exe 文件為
D:\QtProjects\ch02\build-hellocreator-Desktop_Qt_5_4_0_MinGW_32bit-Debug\debug\hellocreator.exe,
如果進(jìn)入該路徑,直接運(yùn)行 exe 文件,那么 exe 文件默認(rèn)是無法正常運(yùn)行的,因?yàn)槿鄙龠\(yùn)行時(shí)依賴的動(dòng)態(tài)庫和環(huán)境變量。需要從開始菜單啟動(dòng) Qt 命令行,然后從命令行啟動(dòng) exe 才能正常運(yùn)行。
②Arguments:目標(biāo)程序的命令行參數(shù),可以在這里手動(dòng)添加命令行參數(shù),這樣每次 QtCreator 啟動(dòng)目標(biāo)程序時(shí)都會(huì)附加該參數(shù)。
③Working directory:目標(biāo)程序工作路徑,這里需要特別注意,目標(biāo)程序既不是從源代碼路徑啟動(dòng),也不是從它自己的可執(zhí)行程序路徑啟動(dòng), 而是從工作路徑啟動(dòng),這個(gè)工作路徑默認(rèn)與影子構(gòu)建路徑一樣。 因此,如果在程序代碼里面使用相對(duì)路徑操作文件,如 “data.db”,那么這個(gè)文件應(yīng)該放到工作路徑,這樣目標(biāo)程序從 QtCreator 啟動(dòng)時(shí),才能找到相對(duì)路徑里的文件。
運(yùn)行設(shè)置里面還有一個(gè)重要的設(shè)置就是 Run Environment,運(yùn)行時(shí)環(huán)境變量的設(shè)置,我們標(biāo)出其中重要的變量如下:
讀者一般對(duì) PATH 環(huán)境變量比較熟悉,就是大量可執(zhí)行程序 *.exe 和依賴庫 *.dll 的路徑,程序啟動(dòng)時(shí)會(huì)從 PATH 環(huán)境變量找尋依賴的 dll 并加載。Qt 也為 PATH 添加了自己的依賴庫路徑,新增的有三個(gè)路徑:
- C:\Qt\Qt5.4.0\5.4\mingw491_32\lib;
- C:\Qt\Qt5.4.0\5.4\mingw491_32\bin;
- C:\Qt\Qt5.4.0\Tools\mingw491_32\bin;
第一個(gè)是編譯時(shí)依賴庫的路徑,第二個(gè)是 Qt 庫自己可執(zhí)行程序和動(dòng)態(tài)庫路徑,第三個(gè)是 MinGW 編譯環(huán)境的可執(zhí)行程序和動(dòng)態(tài)庫路徑。
除了 PATH 環(huán)境變量,Qt 庫專屬的 QTDIR 環(huán)境變量也很重要,Qt 程序運(yùn)行時(shí)不僅依賴 *.dll ,還依賴 Qt 庫里面的插件、翻譯文件、設(shè)置文件等等,QTDIR 是 Qt 庫的總目錄,Qt 程序根據(jù)這個(gè)總目錄自動(dòng)去找尋子文件夾,子文件夾會(huì)包含 Qt 程序運(yùn)行時(shí)依賴的其他東西。如果讀者希望把 Qt 的依賴庫集成到操作系統(tǒng)的環(huán)境變量,那么不僅要設(shè)置 PATH,還要設(shè)置正確的 QTDIR。QTIDR 通常就是 qmake.exe 所在文件夾的父文件夾,比如 qmake.exe 位于 C:\Qt\Qt5.4.0\5.4\mingw491_32\bin,那么 QTDIR 就是 C:\Qt\Qt5.4.0\5.4\mingw491_32 。
本節(jié)內(nèi)容就介紹到這,主 要是通過 HelloCreator 例子熟悉一下集成開發(fā)環(huán)境,下一節(jié)介紹程序大致的調(diào)試過程。
總結(jié)
以上是生活随笔為你收集整理的Qt Creator基本使用方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VUE: 当前页面 引用自定义公用样式
- 下一篇: 集合源码阅读:ArrayList