在Windows上面使用QT5 (without QTcreator or VS 2017)
在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
从QT下载适用于windows的最新版(5.12.1)离线安装包,开始安装
安装时在Qt 5.12.1栏目下面选中MinGW 7.3.0 64-bit:
在Tools栏目下面,取消勾选Qt Creator CDB Debugger Support, 然后勾选MinGW 7.3.0 64-bit, 开始安装。
第二步:配置环境变量
添加环境变量
我的安装路径为H:\Qt\Qt5.12.1
,安装好后,
- 为mingw预编译好的QT动态链接库路径为
H:\Qt\Qt5.12.1\5.12.1\mingw73_64
. - 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才能生效)
检查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
第三步:第一个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
,所以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啦!
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.
参考资料
在Windows上面使用QT5 (without QTcreator or VS 2017)的更多相关文章
- Windows系统 为 QT5软件 搭建 OpenCV2 开发环境
Windows系统 为 QT5软件 搭建 OpenCV2 开发环境 我们的电脑系统:Windows 10 64位 Qt5 软件:Qt 5. 7. 0 OpenCV2 版本:OpenCV2.4.10 1 ...
- Raspberry Pi 4B 安装QT5和qtCreator
https://blog.csdn.net/coekjin/article/details/52049273 sudo apt-get install qt5-default sudo apt-get ...
- Windows下载编译Qt5 Gui
安装工具 Python 这个安装的时候没记录下来,网上查一下,大把, 就不补了. ActivePerl https://www.cnblogs.com/dilex/p/10591579.html 下载 ...
- qt5.5 qtcreator中文乱码
MSVC2010默认保存GBK编码.如果不转换成utf-8编码,对GBK编码的文件,中文可以直接用QStringLiteral()宏,如:QMessageBox msgBox;msgBox.setTe ...
- 在windows下使用Qt5开发GTK3图形界面应用程序
首先,去MSYS2官网下载MSYS2环境并安装在C:/mysys64下,我安装的是64位的. 进入MSYS命令行执行: pacman -S mingw-w64-x86_64-gtk3 pacman - ...
- windows下安装QT并与visual studio 2017搭建开发环境
1.环境搭建 这里并不是说qt必须要和visual studio结合使用,不过用习惯了visual studio开发,继续使用可节省开发时间,并大大提供便利性. 关于安装过程这里不再详细赘述,软件下载 ...
- centos qt5,PyQt5 installation
一.SIP http://www.riverbankcomputing.com/software/sip/download 二.Centos6.5 qt 安装 1,centos linux系统必须 ...
- Qt5中this application has requested the runtime to terminate it in an unusual way 无法运行问题的解决
在windows平台使用Qt5.8mingw版写出的程序,在Qt中运行正常,而以release的形式编译并且补充完必要的dll文件后,在其他电脑上运行出现了以下问题: 经过查阅许多资料和亲身实验,终于 ...
- A previous installation of Qt5 Visual Studio Add-in was detected. Please uninstall it before running this installer解决办法
前段时间在安装Qt Visual Studio插件的时候,安装到一半不小心中止了,结果后来怎么安装都不行,提示已经安装了,要先卸载, 可是到哪里都找不到有卸载的,因为压根就没有安装完成.这可害苦我了. ...
随机推荐
- mathType插入公式编号,及对公式编号的字体进行修改。调整公式上下间距。
一:插入 公式编号. 1:首先设置公式格式.点击 mathtype>insert number >format 2:有简单格式和 高级格式: https://we ...
- Spark Storage(二) 集群下的broadcast
Broadcast 简单来说就是将数据从一个节点复制到其他各个节点,常见用于数据复制到节点本地用于计算,在前面一章中讨论过Storage模块中BlockManager,Block既可以保存在内存中,也 ...
- JMS规范与Kafka
一.为什么需要消息队列 消息队列的核心作用就是三点:解耦一个系统中各个子模块的互相绑定与依赖,异步执行后台耗时逻辑,并行处理一个请求中涉及的多个操作. 以我们常见的下订单场景来说明,我们熟悉的淘宝,后 ...
- 20165324 《网络对抗技术》week1 Kali的安装与配置
20165324 <网络对抗技术>week1 Kali的安装与配置 安装过程 VMware安装过程省略 kali 光盘映像文件的下载 新建虚拟机,并导入. 安装Tools 在菜单中,选择虚 ...
- Python常用函数及说明
原文地址:博客园 CSDN 基本定制型C.__init__(self[, arg1, ...]) 构造器(带一些可选的参数)C.__new__(self[, arg1, ...]) 构造器(带一些可 ...
- jQuery在iframe里取得父窗口的某个元素的值
提供一款jQuery在iframe里取得父窗口的某个元素的值实现,这个iframe用js也差不多,有需要的朋友可以参考一下. 1.在父窗口中获取指定iframe(testiframe) id 为 te ...
- mui笔记
1.关闭当前页面执行上一个页面的方法 var preview = plus.webview.currentWebview().opener() //获取当前窗口的创建者,即A preview.eval ...
- 俞敏洪:未来教育是互联网+ AI +区块链联合颠覆
“我对面向未来教育领域,内心是有一丝悲哀的.至少在我思考和理解的范围内,互联网和 AI 是不是有可能彻底的改变中国教育现状?我没有想清楚.”10 月 31 日,在鲸媒体举办的以“教育 +AI”为的主题 ...
- (一)github之基础概念篇
1.github: 一项为开发者提供git仓库的托管服务, 开发者间共享代码的场所.github上公开的软件源代码全都由git进行管理. 2.git: 开发者将源代码存入名为git仓库的资料库中,而g ...
- 静态编译C/C++程序
静态编译C/C++程序,让程序运行不受平台限制 由于Linux操作系统的特有elf加载顺序. (可以参考此文). 虽然可以很大程度上解决Windows早期版本的dll hell问题, 但是给部署带来了 ...