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