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

本文环境:

最新版 QT 5.12.1

Windows 10 64位

仅考虑动态链接,静态链接不在本文讨论范围内。

因为嫌弃QT Creator的丑陋和VS 2017的笨重,我决定使用VS Code + 命令行来开发QT应用。

从网上搜索到的教程大多是使用QT Creator或者VS 2017的,我想用VS Code + 命令行来开发QT。本文大体内容网上都可以搜到,但却没人告诉我要在windows配置环境变量。我之前因为配置环境没弄好,卡了好几个小时。最后还是自己摸索着弄好了。

Note:以下教程中的版本号可能有变化,自己对照着来就好了。

第一步:安装QT

  1. 从QT下载适用于windows的最新版(5.12.1)离线安装包,开始安装

  2. 安装时在Qt 5.12.1栏目下面选中MinGW 7.3.0 64-bit:

    在Qt 5.12.1栏下选中 MinGW 7.3.0 65-bit
  3. 在Tools栏目下面,取消勾选Qt Creator CDB Debugger Support, 然后勾选MinGW 7.3.0 64-bit, 开始安装。

在Tools栏下选中 MinGW 7.3.0 65-bit

第二步:配置环境变量

添加环境变量

我的安装路径为H:\Qt\Qt5.12.1,安装好后,

  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的报错:

PPS:为什么应该加入QT += widgets?我们的App中,导入了QApplication类(#include <QApplication>),在官网查看QApplication类的文档,可以看到文档的起始处,表格里面有qmake: QT += widgets,所以

在Tools栏下选中 MinGW 7.3.0 65-bit

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啦!

第一个QT5 App:Hello, World !

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.

参考资料

在Windows上面使用QT5 (without QTcreator or VS 2017)的更多相关文章

  1. Windows系统 为 QT5软件 搭建 OpenCV2 开发环境

    Windows系统 为 QT5软件 搭建 OpenCV2 开发环境 我们的电脑系统:Windows 10 64位 Qt5 软件:Qt 5. 7. 0 OpenCV2 版本:OpenCV2.4.10 1 ...

  2. Raspberry Pi 4B 安装QT5和qtCreator

    https://blog.csdn.net/coekjin/article/details/52049273 sudo apt-get install qt5-default sudo apt-get ...

  3. Windows下载编译Qt5 Gui

    安装工具 Python 这个安装的时候没记录下来,网上查一下,大把, 就不补了. ActivePerl https://www.cnblogs.com/dilex/p/10591579.html 下载 ...

  4. qt5.5 qtcreator中文乱码

    MSVC2010默认保存GBK编码.如果不转换成utf-8编码,对GBK编码的文件,中文可以直接用QStringLiteral()宏,如:QMessageBox msgBox;msgBox.setTe ...

  5. 在windows下使用Qt5开发GTK3图形界面应用程序

    首先,去MSYS2官网下载MSYS2环境并安装在C:/mysys64下,我安装的是64位的. 进入MSYS命令行执行: pacman -S mingw-w64-x86_64-gtk3 pacman - ...

  6. windows下安装QT并与visual studio 2017搭建开发环境

    1.环境搭建 这里并不是说qt必须要和visual studio结合使用,不过用习惯了visual studio开发,继续使用可节省开发时间,并大大提供便利性. 关于安装过程这里不再详细赘述,软件下载 ...

  7. centos qt5,PyQt5 installation

    一.SIP http://www.riverbankcomputing.com/software/sip/download   二.Centos6.5 qt 安装 1,centos linux系统必须 ...

  8. Qt5中this application has requested the runtime to terminate it in an unusual way 无法运行问题的解决

    在windows平台使用Qt5.8mingw版写出的程序,在Qt中运行正常,而以release的形式编译并且补充完必要的dll文件后,在其他电脑上运行出现了以下问题: 经过查阅许多资料和亲身实验,终于 ...

  9. A previous installation of Qt5 Visual Studio Add-in was detected. Please uninstall it before running this installer解决办法

    前段时间在安装Qt Visual Studio插件的时候,安装到一半不小心中止了,结果后来怎么安装都不行,提示已经安装了,要先卸载, 可是到哪里都找不到有卸载的,因为压根就没有安装完成.这可害苦我了. ...

随机推荐

  1. string、const char*、 char* 、char[]相互转换(待整理)

    string.const char*. char* .char[]相互转换(全) https://blog.csdn.net/rongrongyaofeiqi/article/details/5244 ...

  2. hiredis(Synchronous API)

    hiredis是一个小型的client端的c库.它只增加了最小对协议的支持,同时它用一个高级别的printf-alike API为了绑定各种redis命令.除了支持发送和接收命令,它还支持对流的解析. ...

  3. 安装selenium python

    https://pypi.org/project/selenium/#files selenium-3.13.0-py2.py3-none-any.whl 安装成功后才能用 from selenium ...

  4. 一些ios牛人的博客

    王巍的博客:王巍目前在日本横滨任职于LINE.工作内容主要进行Unity3D开发,8小时之外经常进行iOS/Mac开发.他的陈列柜中已有多款应用,其中番茄工作法工具非常棒.http://onevcat ...

  5. CUDA显卡运算编程菜鸟入门指南1——Hello world - yfszzx的专栏 - 博客频道 - CSDN.NET

    第一次知道有显卡(GPU)编程这个东西,是去年比特币最热门的时候,看了几篇关于比特币的文章,说比特币挖矿要靠显卡,CPU的速度与GPU根本就没法比,于是就非常好奇,显卡是什么神奇的东西?为什么运算速度 ...

  6. 新浪微博 SAE

    一.云平台中云是指互联网,网络的一种比喻说法,顾名思义,这种平台允许开发者们或是将写好的程序放在“云”里运行,或是使用“云”里提供的服务,或二者皆是. 二.开发类云平台比较: 1.鼻祖 GOOGLE ...

  7. linuxbash 父进程 子进程

    linux登陆linux,就获得一个bash,之后你的bash就是一个独立的进程,被称为pid的就是,之后你在bash下面执行的任何命令都是由这个bash所衍生的,那些被执行的命令被称为子进程.子进程 ...

  8. 20154312《网络对抗》Exp2 后门原理与实践

    常见问题快速链接 Handler failed to bind to xxx.xxx.xx.xxx:xxxx 使用Webcam_snap命令提示1411错误,无法正常拍照 常用后门工具实践 Windo ...

  9. jQuery常用操作

    jQuery jQuery是一个轻量级的JS库,是一个被封装好的JS文件,提供了更为简便的元素操作方式,jQuery封装了DOM. 使用jQuery 引入jQuery文件 <scrtipt sr ...

  10. excel选择元角分下拉菜单选择框自动变更数字

    excel选择元角分下拉菜单选择框自动变更数字 (M2列),数据-->数据有效性-->在“允许”栏中选择序列-->在“来源”栏中输入:分,角,元单位倍数公式(M4列):=IF(M2= ...