VSCode+Qt+MinGW开发环境搭建

news2024/9/28 15:31:50

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”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/366570.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常年霸榜TK彩妆类目,看Focallure菲鹿儿如何玩转出海市场

据市场调研机构弗若斯特沙利文数据报告,2017年至2021年,中国化妆品市场规模由6305亿元增长至9468亿元,年均复合增长率为10.7%,报告预计2023年中国化妆品市场规模将达11414亿元,今后几年的增速将逐渐放缓。随着国内市场…

LeetCode刷题系列 -- 112. 路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。叶子节点 是指没有子节点的…

外置的媒体查询,对性能又一次的优化提升

通常情况下我们写媒体查询都是写在一个样式文件中,对于浏览器加载的时候,会解析到最后一行样式时才会渲染页面,这样就会造成页面的白屏时间过长。 但是通常情况下大量的媒体查询样式都是无用的,现在浏览器允许我们在引用样式文件…

SpringBoot优雅地处理全局异常,返回前端

笔者这边提供了两种处理全局异常的方式。这两种方式各有千秋,都很优雅。至于伙伴们想用哪种方式,那就仁者见仁,智者见智了。0、公共部分在介绍异常处理方式前,先定义一些公共的类。这些类在两种处理方式中都会用到。【自定义业务异…

jupyter的安装步骤

1.安装python文件 首先去官网python去下载python的安装包,点击donwload,选择合适的系统。这里我是windown系统,点击进去,如图找到有installer的去下载。不建议下载最新版本的,会有兼容问题。 2.安装python 点击第二个选项是自己配…

深度学习如何训练出好的模型

深度学习在近年来得到了广泛的应用,从图像识别、语音识别到自然语言处理等领域都有了卓越的表现。但是,要训练出一个高效准确的深度学习模型并不容易。不仅需要有高质量的数据、合适的模型和足够的计算资源,还需要根据任务和数据的特点进行合…

【2023/图对比/增强】MA-GCL: Model Augmentation Tricks for Graph Contrastive Learning

如果觉得我的分享有一定帮助,欢迎关注我的微信公众号 “码农的科研笔记”,了解更多我的算法和代码学习总结记录。或者点击链接扫码关注【2023/图对比/增强】MA-GCL: Model Augmentation Tricks for Graph Contrastive Learning 【2023/图对比/增强】MA-…

备份策略从“3-2-1”到“4-3-2-1”

在数据存储备份领域,说起“3-2-1”备份策略真是无人不知、如雷贯耳!笔者也经常把“3-2-1”备份策略挂在嘴边,那简直就是确保数据安全的圭臬!但是,最近有一位读者问我:“3-2-1”备份策略的出处在哪里&#x…

MySQL - 多表查询

目录1. 多表查询示例2. 多表查询分类2.1 等/非等值连接2.1.1 等值连接2.1.2非等值连接2.2 自然/非自然连接2.3 内/外连接2.3.1 内连接2.3.2 外连接3.UNION的使用3.1 合并查询结果3.1.1 UNION操作符3.1.2 UNION ALL操作符4. 7种JOIN操作多表查询,也称为关联查询&…

LocalDateTime使用

开发中常常需要用到时间,随着jdk的发展,对于时间的操作已经摒弃了之前的Date等方法,而是采用了LocalDateTime方法,因为LocalDateTime是线程安全的。 下面我们来介绍一下LocalDateTime的使用。 时间转换 将字符串转换为时间格式…

五分钟搞懂POM设计模式

今天,我们来聊聊Web UI自动化测试中的POM设计模式。 为什么要用POM设计模式 前期,我们学会了使用PythonSelenium编写Web UI自动化测试线性脚本 线性脚本(以快递100网站登录举栗): import timefrom selenium import …

R统计绘图 | 物种组成堆叠柱形图(绝对/相对丰度)

一、数据准备 数据使用的不同处理土壤样品的微生物组成数据,包含物种丰度,分类单元和样本分组数据。此数据为虚构,可用于练习,请不要作他用。 # 1.1 设置工作路径 #knitr::opts_knit$set(root.dir"D:\\EnvStat\\PCA")#…

[python入门(51)] - python时间日期格式time和datetime

目录 ❤ 预备知识 ❤ UTC time Coordinated Universal Time ❤ epoch time ❤ timestamp(时间戳) ❤ stamptime时间戳 ❤ struct_time时间元组 ❤ format time 格式化时间 ❤ time模块​编辑 ❤ 获取当前时间的方法 ❤ 当传入默认参…

阿里云ECS TOP性能提升超20%!KeenTune助力倚天+Alinux3达成开机即用的全栈性能调优 | 龙蜥技术

文/KeenTune SIG01阿里云 ECS 上售卖页新增“应用加速”功能2023年1月12日 阿里云 ECS 的售卖页有了一些新的变化,在用户选择倚天 Alinux3 新建实例时,多了一个新的选项“应用加速”。这个功能是 阿里云 ECS 基于 KeenTune 提供典型云场景的开机即用的全…

翻转链表k个元素——递归

题目描述25. K 个一组翻转链表难度困难1920收藏分享切换为英文接收动态反馈给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那…

【Python入门第十六天】Python If ... Else

Python 条件和 If 语句 Python 支持来自数学的常用逻辑条件&#xff1a; 等于&#xff1a;a b不等于&#xff1a;a ! b小于&#xff1a;a < b小于等于&#xff1a;a < b大于&#xff1a;a > b大于等于&#xff1a;a > b 这些条件能够以多种方式使用&#xff0c…

再析jvm

前言 希望自己每一次学习都有不同的理解 文章目录前言1. jvm的组成取消永久代使用元空间原因2. 运行时数据区3. 堆栈区别队列和栈&#xff0c;队列先进先出&#xff0c;栈先进后出从栈顶弹出4. GC、内存溢出、垃圾回收4.1 如何确定引用是否会被回收4.1.1 Java中的引用类型4.1.…

OpenStack手动分布式部署Glance【Queens版】

目录 Glance简介 1、登录数据库配置&#xff08;在controller执行&#xff09; 1.1登录数据库 1.2数据库里创建glance 1.3授权对glance数据库的正确访问 1.4退出数据库 1.5创建glance用户密码为000000 1.6增加admin角色 1.7创建glance服务 1.8创建镜像服务API端点 2、安装gla…

LeetCodeHOT100热题02

写在前面 主要是题目太多&#xff0c;所以和前面的分开来记录。有很多思路的图都来源于力扣的题解&#xff0c;如侵权会及时删除。不过代码都是个人实现的&#xff0c;所以有一些值得记录的理解。之前的算法系列参看&#xff1a; 剑指offer算法题01剑指offer算法题02 七、动…

SQL零基础入门学习(八)

SQL零基础入门学习&#xff08;七&#xff09; SQL 连接(JOIN) SQL join 用于把来自两个或多个表的行结合起来。 下图展示了 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 相关的 7 种用法。 SQL JOIN SQL JOIN 子句用于把来自两个或多个表的行结合起来&#xff0c;基…