在Windows上面使用QT5 (without QTcreator or VS 2017)

在Windows上面使用QT5 (without QTcreator or VS 2017)

本文環境: 最新版 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

  1. 從QT下載適用於windows的最新版(5.12.1)離線安裝包,開始安裝app

  2. 安裝時在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

  3. 在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

  1. 爲mingw預編譯好的QT動態連接庫路徑爲H:\Qt\Qt5.12.1\5.12.1\mingw73_64.
  2. mingw編譯器路徑爲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才能生效)

  1. 檢查qmake命令,輸入where qmake,可能有多個結果,只需確保首選路徑是剛剛安裝好的QT路徑便可,即H:\Qt\Qt5.12.1\5.12.1\mingw73_64\bin

    檢查環境變量

  2. 分別檢驗mingw32-make, g++, gcc,首選路徑應該位於H:\Qt\Qt5.12.1\Tools\mingw730_64\bin中。

    檢查環境變量

若是找不到qmake的路徑或者沒有輸出結果,請重啓cmd或powershell

第三步:第一個Hello World GUI程序

1. 編寫Hello World

新建一個文件夾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();
}

2. 初始化QT項目

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的報錯: 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文件。

3. 編譯及運行

首先,在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 releasemingw32-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.

參考資料

相關文章
相關標籤/搜索