VSCode+Qt+MinGW开发环境搭建

2023-11-15

VSCode+Qt+MinGW开发环境搭建

概述

VSCode扩展性很强,插件机制让其具备不断演进的潜力,适合作为稳定的开发工具。

VSCode+Qt开发环境的搭建需要依赖于以下工具:

  1. VSCode、Qt,其中Qt需要安装MinGW编译工具;
  2. VSCode插件:C++、CMake Tools、Qt Tools、QtConfigure

具体思路上,VSCode只是提供了集成界面,通过它的插件机制来实现对Qt、CMake等工具的调用。

QtConfigure

VSCode中按下F1Ctrl+Shift+P,输入QtConfigure(不区分大小写)会弹出四个菜单:

  • New Project:创建新的Qt项目;
  • Set Qt Dir:指定Qt安装目录,从而识别Qt的套件(Kit),套件是安装Qt时勾选的MinGWMSVC套件;
  • Open Qt Assistant:打开帮助文档;
  • Open Qt Designer:打开Qt设计师编辑界面。

在这里插入图片描述

首先要做的是指定Qt安装目录,指定到MaintainanceTool.exe所在目录即可,不用具体到哪个套件,随后将检测出该版本Qt所安装的编译套件,如下图中检测出了4种套件:

在这里插入图片描述

随后可以创建Qt工程F1输入QtConfigure后选择New Project,经过如下步骤:

  • 输入项目名称:此处输入HelloWorld
  • 选择套件:刚才检测到的之一,此处选择mingw73_64
  • 选择编译工具:此处选择CMake
  • 选择是否带UI文件:此处选择yes

最后在文件夹下生成的项目文件如下图:

在这里插入图片描述

CMake Tool

项目已经生成好了,接下来理论上应该F5就开始调试了,不过一般没那么顺利

梳理一下CMake管理Qt项目的逻辑:

  • CMake依据CMakeLists.txt文件生成makefile
  • QtMinGW套件拿到makefile后编译链接生成最后的可执行文件。

其中关键步骤即是:CMakeQtMinGW套件关联F1输入cmake select a kit,选择该指令后弹出CMake搜索到的编译套件:

在这里插入图片描述

上图中的GCC 7.3.0...看着十分眼熟,就是刚才创建项目时选择的Qt套件,选择它即可。

第一次打开不一定有,猜测原因大致是:CMake会从环境变量Path的位置去搜索Kit,但正经人谁装完Qt还去把套件目录添加到环境变量?

CMake Tools插件提供了办法:F1输入cmake edit user-local cmake kits,选择该指令后会弹出一个名为cmake-tools-kits.json的文件,里面的结构是一个对象数组,每个对象描述了一个套件,在其中添加自己安装的Qt MinGW两个套件:

  {
    "name": "GCC 7.3.0 x86-w64-mingw32",
    "compilers": {
      "C": "D:\\APPs\\Qt\\5.14.2\\Tools\\mingw730_32\\bin\\gcc.exe",
      "CXX": "D:\\APPs\\Qt\\5.14.2\\Tools\\mingw730_32\\bin\\g++.exe"
    },
    "preferredGenerator": {
      "name": "MinGW Makefiles"
    },
    "environmentVariables": {
      "CMT_MINGW_PATH": "D:\\APPs\\Qt\\5.14.2\\Tools\\mingw730_32\\bin"
    }
  },
  {
    "name": "GCC 7.3.0 x86_64-w64-mingw32",
    "compilers": {
      "C": "D:\\APPs\\Qt\\5.14.2\\Tools\\mingw730_64\\bin\\gcc.exe",
      "CXX": "D:\\APPs\\Qt\\5.14.2\\Tools\\mingw730_64\\bin\\g++.exe"
    },
    "preferredGenerator": {
      "name": "MinGW Makefiles"
    },
    "environmentVariables": {
      "CMT_MINGW_PATH": "D:\\APPs\\Qt\\5.14.2\\Tools\\mingw730_64\\bin"
    }
  },

保存退出后,F1输入cmake select a kit,选择scan for kits之后就能找到刚才定位的套件了,选择mingw73_64对应的套件,跑到main.cpp象征性打个断点,F5运行。

可能极容易出现这样的现象:调试也好,直接运行也好,直接闪退了

笔者通过从文件管理器直接打开可执行文件,发现提示缺少Qt相关的dll文件,于是在build目录下运行了一把windeployqt,后续没再出过问题:

D:\APPs\Qt\5.14.2\5.14.2\mingw73_32\bin\windeployqt.exe .\HelloWorld.exe

然后终于到了F5调试的阶段:

在这里插入图片描述

大功告成!

总结

  1. F1Ctrl+Shift+P异常强大,可以执行各种插件的命令;
  2. QtConfigure先找到安装的Qt目录,使用插件的set qt dir指令;
  3. QtConfigure创建新的Qt项目,依次经过输入项目名称、选择套件、选择CMake构建工具、选择是否包含UI文件几个步骤,完成项目创建;
  4. CMake Tools需要找到Qt的套件,通过使用插件的Edit User-Local CMake Kits指令,在打开的cmake-tools-kits.json文件中添加Qt的套件;
  5. CMake Tools选择和创建工程时相同的Qt的套件
  6. 构建一次目标,随后使用windeployqtbuild目录补全缺失的dll文件;
  7. F5调试,大功告成。

遗留问题

大体框架完成了,能实现VSCode+Qt+MinGW的开发,但仍然有几个方面值得改善:

  1. windeployqt这一步应该可以用VSCode的脚本自动完成,应该是在.vscode文件夹下的相关json文件中指定;

  2. .h文件和.cpp文件中均有编译错误,这一点其实很不应该,这对开发过程影响还是较大的,应该通过简单的配置或者安装其他插件就能够避免;

  3. .vscode/launch.json文件中,即使是32位程序,使用的debugger也似乎是64位的,似乎不太对劲,在.../mingw730_32/bin目录下是有gdb.exe的,这个问题或许需要修改QtConfigure插件源码才能改正,或者如果不影响就不需要改动也可;

    “miDebuggerPath”: “d:/APPs/Qt/5.14.2/Tools/mingw730_64/bin/gdb.exe”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VSCode+Qt+MinGW开发环境搭建 的相关文章

  • 使用 QTestLib 时抑制 qDebug

    我正在向 Qt 中的项目添加单元测试 并希望使用 QTestLib 我已经设置了测试并且它们运行良好 问题是在项目中我们重写了 qDebug 以输出到我们自己的日志文件 这在运行应用程序时效果很好 问题是当我测试类时 它有时会开始记录 然后
  • 如何在使用 Cmake 构建期间编译 HLSL 着色器?

    我正在开发 d3d 应用程序 我想在使用 cmake 构建期间编译我的 hlsl 着色器 我不知道从哪里开始 这是我当前的 CMakeLists txt cmake minimum required VERSION 3 20 project
  • 渲染具有透明度的纹理时,OpenGL 不需要的像素

    我已经为这个问题苦苦挣扎了一段时间了 当我使用 OpenGL 渲染 2D 纹理 在无透明度和部分透明度之间的过渡上具有透明度值 时 我得到了一些烦人的灰色像素 我认为这是像素值插值的产物 关于如何改进这一点有什么想法吗 I m attach
  • 如何从 ffmpeg 中打开的文件获取流信息?

    我正在尝试使用 ffmpeg 读取视频文件 我有与其旧版本相对应的工作代码 并开始尝试升级到最新的构建版本 将所有这些已弃用的函数替换为其实际的类似函数 但是我遇到了问题 似乎没有检索到任何流 并且视频负载停止在轨道中 这是我正在使用的代码
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • CMake 找不到请求的 Boost 库

    既然我已经浏览了其他人的解决方案几个小时 但找不到适合我的问题的正确答案 我想将我的具体问题带给您 我正在尝试使用 CMake 构建 vsomeip 为此 我之前构建了 boost 1 55 但是 我在 CMake 中收到以下错误 The
  • 在 Qt 中用像素图画笔画一条线?

    一段时间以来 我正在使用 Qt C 开发一个简单的绘图和绘画应用程序 目前我正在使用 QPainter drawLine 进行绘制 并且工作正常 我想做的是用像素图画笔绘图 这是我可以做到的 我可以使用 QPainterPath 和 QPa
  • 使用 CMake 在 iOS 中使用另一个 STATIC 库创建一个 STATIC 库

    我有一个 libfooi a 的集合 libfoo1 a libfoo2 a libfoo3 a 使用工厂 带有静态代码 有一个公共接口来创建 C 对象 使用 CMake 我选择其中之一 并创建一个链接它并添加所有内容的 libfooWra
  • QListWidget 拖放项目从 Symbian 列表中消失

    我在实现带有可通过拖放重新排序的自定义项的 QListWidget 时遇到问题 问题是当我在某个项目上快速双击 非常短的拖放 时 该项目有时会从 QListWidget 中消失 这是我的小部件的构造函数 ListPopisiDragDrop
  • 将 QMAKE_CXXFLAGS += -std=c++11 添加到 qt 中的 .pro 文件不起作用(在 linux 12.04 上)

    编译器输出 main o 错误 1 cc1plus 错误 无法识别的命令行选项 std c 11 解决方案是更新系统上的旧 gcc 版本 事实上 我很惊讶你的 12 04 Ubuntu 变体上有这么旧的版本 默认情况下应该有 4 6 3 您
  • 在未安装 Qt VS Tools 的情况下以 Qt/MsBuild 格式编译 Qt 项目

    我在 Visual Studio 中有很多 Qt 项目 使用新的 Qt MsBuild 格式 https blog qt io blog 2018 02 16 qt visual studio improving performance 由
  • CMake:从多行文本文件获取版本

    我有一个文件version txt VERSION MAJOR 1 VERSION MINOR 1 VERSION PATCH 3 我想使用 cmake 添加主要 次要和补丁的定义 我尝试过使用 file STRING version tx
  • 如何通过 Qt 创建网络服务 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Qt 5.5 QOpenGLWidget 链接错误未链接任何 openGL 调用

    我尝试使用 Qt 5 5 1 构建一个简单的 OpenGL 应用程序 一切都很好 直到我尝试使用 glClearColor 等 openGL 本机函数调用 该小部件实际上编译并产生黑屏 但在我尝试使用任何 openGL 本机函数后 它甚至不
  • 如何告诉 CMake 将构建文件放在哪里?

    我想告诉 CMake 将文件和文件夹输出到不同的文件夹而不是当前文件夹 我在下面讨论的是 CMake 生成的文件 文件 CMakeCache txt 目录 CMakeFiles 文件 生成文件 目录 bin 文件 cmake install
  • 具有多个父项的 Qt 树模型

    我想构建一棵树 其中一个元素可以引用另一个元素 我想要构建的树是 像这样的东西 A B C D E F P this is a pointer to C D first child of C E second child of C I fo
  • 如何从浮点数组创建新的 QImage

    我有一个代表图像的浮点数数组 列在前 我想在 QGraphicsSecene 上将图像显示为 QPixmap 为了做到这一点 我尝试使用 QImage 构造函数 QImage const uchar data int width int h
  • 在 CMake 中使用 GLOB 指定源文件还是单独指定每个文件更好?

    CMake 提供了多种方法来指定目标的源文件 一种是使用通配符 文档 https cmake org cmake help latest command file html 例如 FILE GLOB MY SRCS dir 另一种方法是单独
  • 如何为 qmlRegisterSingletonType 实现单例提供程序?

    我想在 QML 中使用 C 类作为 Singleton 实例 并认为我必须使用 qmlRegisterSingletonType 注册它们 此函数需要一个提供已注册 C 类的实例的函数 我在 Windows 上使用最新的 Qt 5 3 1
  • 如何指定CMAKE外部项目的编译器?

    我使用ExternalProject Add 包含一个外部项目 我想要的是能够做到 cmake DCMAKE CXX COMPILER

随机推荐

  • 利用STM32F103最小系统做C2接口离线烧录器

    前言 在做BLHeli S电调的时候需要用下载器给EFM8BB21下载程序 这可能需要买C8051下载器 下载器下载也很麻烦 这就萌生出做一个C2接口的离线下载器的想法 离线下载器想法 1 支持U盘功能 可以通过USB连接到电脑然后把固件文
  • 数据库中DDL、DQL、DML、DCL、TCL都是什么意思

    结构化查询语言 SQL 是一种数据库语言 DDL DQL DML DCL TCL是数据库语言中的五大类型 1 DDL Data Definition Language DDL是数据定义语言 主要用来定义或者改变表的结构 例如 CREATE
  • The file “xxx” couldn’t be opened because you don’t have permission to view it. You don’t have permi

    问题 Xcode 使用真机编译不报错 运行报如下错误 The file xxx couldn t be opened because you don t have permission to view it You don t have p
  • Py之pdpbox:深度解析Python数据探索库PDPbox

    Py之pdpbox 深度解析Python数据探索库PDPbox PDPbox是一个基于Python的数据探索工具库 可以帮助用户更好地理解数据特征之间的关系以及其对模型性能的影响 该库提供了多种数据可视化和解释工具 方便用户进行快速实验和分
  • python wheel文件

    wheel介绍 whl文件 WHL file 也称为轮子 wheel 这是用于python分发 distribution 的标准内置包格式 standard built package format 它包含安装所需的所有文件和元数据 met
  • 实证研究的步骤_案例研究法

    案例研究法是实地研究的一种 研究者选择一个或几个场景为对象 系统地收集数据和资料 进行深入地研究 用以探讨某一现象在实际生活环境下的状况 比如民族志研究 扎根理论等 可观察也可仅通过资料分析进行研究 适用条件 当现象与实际环境边界不清而且不
  • 使用httpwebrequest发送数据到网站

    怎样通过HttpWebRequest 发送 POST 请求到一个网页服务器 例如编写个程序实现自动用户登录 自动提交表单数据到网站等 假如某个页面有个如下的表单 Form
  • vue简单实现div滚动触底加载更多数据效果

    vue简单实现div滚动触底加载更多数据效果 1 html div class webTherapyAuditList div里放置一些需要滚动加载的信息 滚动函数通过 scroll触发 div 2 js 获取页面滚动距离 handleSc
  • js 获取tabel Cell 内input 的信息

    1 要建立一个清单 在网页表格内输入信息并可以获取保存 这里只写如何获取table 里单元格里input 或 textarea 的信息 2 html 的代码如下 table tr td r name td td r value1 td td
  • arcgis---填充面要素空洞

    1启动编辑 选中面要素 2构造要素选面 3绘制一个包含空洞的任意多边形 4按住shift 选择合并 属性可选择1 2 5 加载绘图工具 使用矩形工具绘制任意的图形覆盖所有图形 6将图形要素转换成面要素 7分析工具 标识 8数据管理 多部分至
  • ROS Navigation-----map_server简介

    map server包提供了一个map server ROS Node 该node通过ROS Service方式提供地图数据 该包还提供了map saver命令行utility 使用该工具可将动态创建的地图保存成文件 1 Map forma
  • 日常——js

    1 闭包 1 1 概念 闭包指 有权访问另一个函数作用域中变量的函数 1 2 优缺点 优点 闭包函数中的变量不会随着闭包函数销毁而销毁 而是要等到还在使用它的函数销毁时才会销毁 缺点 频繁使用闭包会造成内存泄漏 闭包 会将它的外部函数的作用
  • 如何获取 两个日期之间的 天数

    获取两个日期对应的时间戳 1 然后时间戳的差 24 60 60
  • 最大子序列和及序列起始位置-全负数也适用-O(N)时间复杂度

    有一个很经典的题目 给定一个整数组 求连续子序列的最大和 整数为正 负 0皆有可能 先考整数不是全负的情况 和最大的连续子序列 必然是以一个非负数开头 因为和加上一个负数 和变小 此外 和为负数的连续子序列 也不可能是目标子序列的开头的一段
  • 申请苹果个人开发者账号流程

    因为经常有人问我怎么申请苹果开发者账号 这里记录下来方便使用 准备 1 一个苹果账号 Apple ID 2 一张开通visa或master功能的信用卡 3 身份证正反面照片 4 一部苹果手机 5 一个手机号 申请流程 一 先注册一个苹果账号
  • python报错:ImportError: cannot import name ‘calinski_harabaz_score‘ from ‘sklearn.metrics‘解决方案

    报错 ImportError cannot import name calinski harabaz score from sklearn metrics 解决方案 harabaz 改为harabasz 成功解决
  • idea强制回退gitlab分支代码

    1 如果合并分支出错 执行以下两步操作 1 切换到本地分支 找到要回退到的点 2 找到本地该项目的文件目录 空白处右键选择 git bash here 将本地分支代码强推到远程库 执行命令符 git push f origin develo
  • 1.MySQL数据库的基本操作

    数据库操作过程 1 用户在客户端输入 SQL 2 客户端会把 SQL 通过网络发送给服务器 3 服务器执行这个 SQL 把结果返回给客户端 4 客户端收到结果 显示到界面上 数据库的操作 这里的数据库不是代表一个软件 而是代表一个数据集合
  • Navicat 15安装教程,强烈推荐收藏!

    Navicat是一款轻量级的用于MySQL连接和管理的工具 非常好用 使用起来方便 简洁 下面讲讲其安装的过程 1 进入navicat官网 选择Navicat for MySQL 然后点击进行下载即可 官网连接 http www navic
  • VSCode+Qt+MinGW开发环境搭建

    VSCode Qt MinGW开发环境搭建 概述 VSCode扩展性很强 插件机制让其具备不断演进的潜力 适合作为稳定的开发工具 VSCode Qt开发环境的搭建需要依赖于以下工具 VSCode Qt 其中Qt需要安装MinGW编译工具 V