本文環境: 最新版 QT 5.12.1 Windows 10 64位 僅考慮動態連接,靜態連接不在本文討論範圍內。linux
由於嫌棄QT Creator的醜陋和VS 2017的笨重,我決定使用VS Code + 命令行來開發QT應用。c++
從網上搜索到的教程大可能是使用QT Creator或者VS 2017的,我想用VS Code + 命令行來開發QT。本文大致內容網上均可以搜到,但卻沒人告訴我要在windows配置環境變量。我以前由於配置環境沒弄好,卡了好幾個小時。最後仍是本身摸索着弄好了。shell
Note:如下教程中的版本號可能有變化,本身對照着來就行了。windows
從QT下載適用於windows的最新版(5.12.1)離線安裝包,開始安裝app
安裝時在Qt 5.12.1欄目下面選中MinGW 7.3.0 64-bit:工具
<figure align="center"> <img src="http://ww1.sinaimg.cn/large/0070O95Yly1g0viqpmqn3j30dw0d0t8x.jpg" width="250"> <figcaption>在Qt 5.12.1欄下選中 MinGW 7.3.0 65-bit</figcaption> </figure>spa
在Tools欄目下面,取消勾選Qt Creator CDB Debugger Support, 而後勾選MinGW 7.3.0 64-bit, 開始安裝。.net
<figure align="center"> <img src="http://ww1.sinaimg.cn/large/0070O95Yly1g0virozkhhj30dw0fkdfw.jpg" width="250"> <figcaption>在Tools欄下選中 MinGW 7.3.0 65-bit</figcaption> </figure>命令行
添加環境變量 個人安裝路徑爲H:\Qt\Qt5.12.1
,安裝好後,debug
H:\Qt\Qt5.12.1\5.12.1\mingw73_64
.H:\Qt\Qt5.12.1\Tools\mingw730_64
.分別將H:\Qt\Qt5.12.1\5.12.1\mingw73_64\bin
以及 H:\Qt\Qt5.12.1\Tools\mingw730_64\bin
加入環境變量。
若是電腦上此前安裝過mingw併爲其配置了環境變量,最好刪掉原來的環境變量)
檢驗環境變量 檢驗剛剛環境變量的配置是否成功,打開新的cmd或者powershell窗口(在加入環境變量後須要重啓cmd或powershell才能生效)
檢查qmake命令,輸入where qmake
,可能有多個結果,只需確保首選路徑是剛剛安裝好的QT路徑便可,即H:\Qt\Qt5.12.1\5.12.1\mingw73_64\bin
。
分別檢驗mingw32-make
, g++
, gcc
,首選路徑應該位於H:\Qt\Qt5.12.1\Tools\mingw730_64\bin
中。
若是找不到qmake的路徑或者沒有輸出結果,請重啓cmd或powershell
新建一個文件夾example
, 在該文件夾裏建立名爲hello.cpp
的文件,填入以下內容:
#include <QApplication> #include <QPushButton> int main(int argc, char **argv) { QApplication app (argc, argv); QPushButton button ("Hello world !"); button.show(); return app.exec(); }
在example
目錄中打開一個命令行窗口,輸入qmake -project
,會在目錄下生成一個與當前目錄同名的pro
文件,在這裏是example.pro
。
.pro文件是QT項目的配置文件,能夠指定項目的名稱、項目所用到的c++源碼等等。
咱們的GUI程序中使用到了QT Widgets模塊,由於qmake -project不會自動導入Qt Widgets模塊, 咱們須要在example.pro
文件中加入一行代碼QT += widgets
。
此時,example.pro
裏面的內容應該變爲:
###################################################################### # Automatically generated by qmake (3.1) Thu Mar 7 14:03:07 2019 ###################################################################### TEMPLATE = app TARGET = example INCLUDEPATH += . # The following define makes your compiler warn you if you use any # feature of Qt which has been marked as deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 # Input SOURCES += hello.cpp QT += widgets
PS:若是你不加入
QT += widgets
,在編譯時,會出現fatal error: QApplication: No such file or directory
的報錯:PPS:爲何應該加入
QT += widgets
?咱們的App中,導入了QApplication類(#include <QApplication>
),在官網查看QApplication
類的文檔,能夠看到文檔的起始處,表格裏面有qmake: QT += widgets
,因此<figure align="center"> <img src="http://ww1.sinaimg.cn/large/0070O95Yly1g0vjf60pktj30mi0aajrt.jpg" width="400"> <figcaption>在Tools欄下選中 MinGW 7.3.0 65-bit</figcaption> </figure>
PPPS:每次修改QT的
.pro
配置文件後,須要執行mingw32-make clean
清理以前的編譯殘留文件,並從新運行qmake
生成新的Makefile。 PPPPS:新增源代碼文件後,須要手動將源文件名加入.pro
文件中,或者從新運行qmake -project
命令,生成新的.pro
文件。
首先,在hello
目錄下執行qmake
命令,這樣會生成相應的Makefile文件。
而後,在hello
目錄下執行mingw32-make
命令,開始編譯,最後會生成一個release
文件夾,裏面就是一個咱們的可執行文件example.exe
了。雙擊example.exe
咱們就能夠看到Hello World啦!
<figure align="center"> <img src="http://ww1.sinaimg.cn/large/0070O95Yly1g0vkgvcithj30eq081mxm.jpg" width="250"> <figcaption>第一個QT5 App:Hello, World !</figcaption> </figure>
PS:
mingw32-make release
和mingw32-make debug
分別生成release和debug版本的可執行文件,mingw32-make
默認指代mingw32-make release
。
咱們在上一步獲得了單個可執行文件example.exe
,是否是意味着咱們就能夠分發咱們的應用了呢?非也。這個example.exe
依賴了咱們本機上的QT動態連接庫,若是是在其餘沒有安裝QT的電腦上,這個小小的可執行文件是運行不了的。
還好,QT爲咱們提供了打包動態連接庫的工具——windeployqt
,使用這個工具,咱們就能夠將動態連接庫與咱們的可執行文件打包在一塊兒了。
windeployqt
的默認路徑爲H:\Qt\Qt5.12.1\5.12.1\mingw73_64\bin\windeployqt.exe
,因爲咱們以前爲這個目錄添加了環境變量,咱們能夠直接使用windeployqt
命令運行該工具。
打包動態連接庫
在release目錄裏,打開一個命令行窗口,執行windeployqt
命令,它會自動掃描並添加咱們的可執行文件依賴的動態連接庫。
將release整個目錄搞成一個壓縮包,發給你的小夥伴,他們也能愉快的運行你的程序啦。
windeployqt
不會自動打包C++運行庫,不過通常電腦上都有,在極少部分新系統上,可能沒法運行。你不嫌麻煩的話,能夠利用dependeny walker添加C++ Runtime.