在VSCode中借助AI丰富C++Qt应用程序

随着国内外各类自动化编程助手的普及,作为传统桌面C++开发者,也要及时地用上这样强大的工具。考虑到网速问题,国外的服务时断时续,还是倾向于使用一些国产的大语言模型助手。我们今天就来看看在VSCode下使用大语言模型辅助Qt开发。

1. 用好QtCreator + VSCode组合

VSCode成为AI助手最先支持的代码编辑器,也是AI插件最丰富的编辑器之一。我以前用的很少,主要用QtCreator。最近用了一下,感觉有必要引入我的工具链条内,作为QtCreator/VS的助手来用。

1.1 VSCode 是最先一批支持流畅AI体验的编辑器

之所以能做到最先一批,是因为他的 开源特性——在过去十年中一直是GitHub上最成功的开源项目之一。开源使得开发者能够深入了解编辑器的内部机制,方便进行集成和定制。另一方面,和VS、QtCreator相比,它的 可扩展性 更聚焦:作为编辑器的定位,使得它比较聚焦于代码的录入(而不是连着GUI绘制都要管),这使得为它开发AI助手,比为复杂的IDE开发更清晰明了。最重要的,是它语言支持丰富。既然是代码编辑器,主要是敲代码的,那就不需要做编译器、GUI绘图工具等特性,自然支持的语言就多了(把工作流甩给插件和程序猿了)。正因如此,行业内逐渐形成了以VSCode为代表的AI用户体验。

1.2 VSCode 是很好的Qt项目辅助工具

VSCode写Qt项目,和IDE提供的功能来说,还是有区别的,我觉得主要区别如下:
首先,集成程度稍差。 C++/Qt传统集成开发环境是一个一体化的开发软件服务套。例如Visual Studio、QtCreator等,内置了大量的UI自动化工具,用户可以通过界面可视化设计菜单、工具栏,并动动鼠标就插入代码。

auto
上图就是在Qt的原生IDE下,自动插入信号-槽的代码。然而,和QtCreator不同,VSCode是一个轻量级的代码编辑器,默认情况下只提供了基本的代码编辑功能,如语法高亮、代码自动完成等。如果要实现编译、调试等功能,需要安装相应的插件,且不是“开箱即用”,配置起来,新手还是要找寻一会儿。即使是Python编程,和 Anaconda 旗下几款IDE相比,某些方面还是有点麻烦。 其次, 普适性与针对性区别显著。IDE通常针对几种特定的编译语言为主,如Java C#、VB。它们针对特定语言进行了优化,除了基本的代码编辑功能外,还包括编译器、调试器、图形用户界面设计工具、版本控制系统集成等,能够满足软件开发过程中的各种需求。VSCode具有较高的普适性,虽然通过插件可以实现很多功能,但在功能的完整性和深度上可能不如一些专业的IDE,且缺少专门的优化和整合。

总之,我们需要QtCreator作为创建、修改Qt项目的主用工具。由于QtCreator自带的AI插件是商业许可,我们使用VSCode作为代码编辑器和注释生成器使用。这种情况下,可以最大程度发挥AI的能力。

2. 配置VSCode

2.1. 介绍没有AI情况下笔者的开发环境

由于在使用 VSCode之前,已经安装了很多Qt常用的前置环境,有必要和大家说一下。

  1. Manjaro Linux SSD作为主用开发环境。
  2. Windows MSYS2 mingw64、ucrt64、Clang32/64、mingw32环境全套 POSIX环境及Qt已经安装,作为第二开发环境,用来验证1的代码跨平台能力。
  3. Visual Studio 2022 C++/Qt 扩展模块已经完全具备,用来为VS用户发布开箱即用的源码资源——MSYS2和VS有区别,为了让使用代码的朋友不会踩坑,也要在VS下编译运行测试——做好人做到底。
  4. Qt Online Installer + MSVC 2022 Qt6.9。永远追求最新的版本。如果很慢,请用命令行换源:
Installer/Maintainer.exe --mirror http://mirrors.ustc.edu.cn/qtproject/
  1. Git 2.35已经安装。

当然,如果只是为了使用AI来给代码加注释等功能,或者去读别人的代码,则无需安装Qt的上述环境。只需要配置好 VSCode 即可。然而,若是要能够在VSCode下编译、运行、调试 Qt 项目,则建议具备 3、4

Linux下的Code开源版没有这么麻烦,pacman 或者 apt 默认的Qt、cmake就行了。

2.2 安装配置 VSCode

首先去官网下载安装包,而后安装、启动。启动后,直接转到扩展一栏,搜索“Qt”,并安装扩展. 注意,安装VSCode扩展要安装官方的,即作者是“QtGroup”. 这里,我选取All-in-one的 meta pack “Qt Extension Pack”,默认有四个选项会被安装。

Qt Externsion Pack
同时,确保CMakeTools安装了微软官方的版本:

CMake
最后,安装一个免费的AI环境,这样就不会在编码时卡死。这里选取速度比较快的CodeGeeks(智谱清言)

CodeGeex

2.3 重启并登入AI账号

这个AI需要拉起网页用手机验证码登入。从略。登入后,随便打开一个node.js的批处理文件,就能感受续写了:
JS

3. 辅助开发Qt CMake项目

作为一个通用性很强的编辑器,VSCode在易用性方面比起Qt的私房菜QtCreator还是要差一些。首次配置,需要点不少鼠标和按钮。

3.1 确定Qt的位置

需要在扩展配置界面,“QtCore”选择项里,指定Qt的文件夹。如果你的Qt默认傻瓜化安在C:\Qt,一般不需要这个步骤。否则,就需要手工指定了。
配置Qt路径

指定后,就会弹出“在某某文件夹找到N个Qt版本”的提示。

3.2 选择构建工具链

完成3.1后,选择“文件”-“打开文件夹”,选择要打开的CMake Qt项目,停顿些许后,会弹出工具链选择选项卡。如果没有弹出,或者选错了,则直接敲击 :CMake Sel 即可找到入口重新选择:

Sel

此时,请注意一定要选取正确的工具链,比如我选择的是倒数第一个。
SearchAKit for cmake
选择后,CMake自动会运行,如果没有错误,会输出“done”:
CMake OK
如果出错了,VSCode会进入CMake调试模式 ,大赞!虽然功能没有C++调试这么多,但是比起纯命令行反复尝试,还是方便多了。

3.3 构建运行

点击构建俺就直接编译了:
build
到了运行环节,还要配置。首先,在运行调试界面,看到的是下图:

debug

点击“Create a launch.json file”,会让选择调试器,我们要选择 "CMake Debugger:
cmake

选择后,会弹出CMake的配置,选择“{}Qt:Debug with cppvsdbg (windows)”,以对应我们的VC2022 Qt6:
Add lau
上述步骤配置完毕后,就可以调试了。

AI

4. 关于qmake和CMake

可以看到,上述工作是基于CMake做的。VSCode下,对qmake支持的不咋地。如果要支持qmake,需要使用 Visual Studio。Qt选择同时支持CMake和qmake这两种构建系统,主要考虑的是大型项目的兼容性。

  • qmake作为Qt传统的构建工具(自Qt 4时代起),需要保持对现有项目的兼容

  • 近期版本中(如Qt 6),qmake虽然仍是可选方案,但已不再是默认推荐

  • CMake支持跨平台构建的标准化(符合Kitware的CMake规范)

  • 更完善的第三方库集成(如通过find_package)

  • 新开发者更熟悉CMake(已成为C++事实标准)

  • 大型项目倾向CMake(如需要集成非Qt组件时)

    这种双轨制策略反映了Qt在技术创新和用户习惯之间的平衡,预计未来版本中CMake将逐渐成为主导构建方案,而qmake会进入长期维护状态。

我们在Visual Studio里,也可以安装 CodeGeeX扩展,用于辅助开发 Qt qmake项目。需要注意的是,VS里的CodeGeeX的代码介入度没有 VSCode高,很多时候是独立输出到自己的对话框,需要^V过来。因为这个原因,我们还是推荐 VSCode。

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

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

相关文章

Java八股文——JVM「内存模型篇」

JVM的内存模型介绍一下 面试官您好,您问的“JVM内存模型”,这是一个非常核心的问题。在Java技术体系中,这个术语通常可能指代两个不同的概念:一个是JVM的运行时数据区,另一个是Java内存模型(JMM&#xff0…

RabbitMQ 高可用与可靠性保障实现

RabbitMQ 高可用与可靠性保障实现详解 一、高可用架构设计1.1 集群部署模式1.2 镜像队列(Mirrored Queue) 二、可靠性保障机制2.1 消息持久化2.2 确认机制(Confirm & Ack)2.3 死信队列(DLX) 三、容灾与…

12.7Swing控件6 JList

在 Java Swing 中,列表框(JList)是用于显示一组选项的组件,用户可以从中选择一个或多个项目。以下是关于 Swing 列表框的详细介绍: 1. 基本概念与用途 作用:以垂直列表形式展示选项,支持单选或…

C++: condition_variable: wait_for -> unlock_wait_for_lock?

作为C++的初学者,面临的一个很大的问题,就是很多的概念并不是可以通过名称直观的预知它要完成的细节,比如这里的condition_variable的wait_for。C++的设计意图好像是,我告诉你这样用,你只要这样做就行,又简单还实用!而且需要记住的规则量又大的惊人。最后看起来,更像是…

HTML版英语学习系统

HTML版英语学习系统 这是一个完全免费、无需安装、功能完整的英语学习工具,使用HTML CSS JavaScript实现。 功能 文本朗读练习 - 输入英文文章,系统朗读帮助练习听力和发音,适合跟读练习,模仿学习;实时词典查询 - 双…

【JUC面试篇】Java并发编程高频八股——线程与多线程

目录 1. 什么是进程和线程?有什么区别和联系? 2. Java的线程和操作系统的线程有什么区别? 3. 线程的创建方式有哪些? 4. 如何启动和停止线程? 5. Java线程的状态模型(有哪些状态)? 6. 调用…

LSTM-SVM多变量时序预测(Matlab完整源码和数据)

LSTM-SVM多变量时序预测(Matlab完整源码和数据) 目录 LSTM-SVM多变量时序预测(Matlab完整源码和数据)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 代码主要功能 该代码实现了一个LSTM-SVM多变量时序预测模型&#xff0c…

ES6——数组扩展之Set数组

在ES6(ECMAScript 2015)中,JavaScript的Set对象提供了一种存储任何值唯一性的方式,类似于数组但又不需要索引访问。这对于需要确保元素唯一性的场景非常有用。Set对象本身并不直接提供数组那样的方法来操作数据(例如ma…

日志收集工具-logstash

提示:Windows 环境下 安装部署 logstash 采集日志文件 文章目录 一、下载二、解压部署三、常用插件四、常用配置 Logstash 服务器数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的存储库中。Logstash 没…

6个月Python学习计划 Day 21 - Python 学习前三周回顾总结

✅ 第一周:基础入门与流程控制(Day 1 - 7) “打地基”的一周,我们走完了从变量、输入输出、判断、循环到第一个小型系统的完整链路。 📘 学习重点: Python 基础语法:变量类型、字符串格式化、注…

Spring Boot SQL数据库功能详解

Spring Boot自动配置与数据源管理 数据源自动配置机制 当在Spring Boot项目中添加数据库驱动依赖(如org.postgresql:postgresql)后,应用启动时自动配置系统会尝试创建DataSource实现。开发者只需提供基础连接信息: 数据库URL格…

java每日精进 6.11【消息队列】

1.内存级Spring_Event 1.1 控制器层:StringTextController /*** 字符串文本管理控制器* 提供通过消息队列异步获取文本信息的接口*/ RestController RequestMapping("/api/string-text") public class StringTextController {Resourceprivate StringTex…

【凌智视觉模块】rv1106 部署 ppocrv4 检测模型 rknn 推理

PP-OCRv4 文本框检测 1. 模型介绍 如有需要可以前往我们的仓库进行查看 凌智视觉模块 PP-OCRv4在PP-OCRv3的基础上进一步升级。整体的框架图保持了与PP-OCRv3相同的pipeline,针对检测模型和识别模型进行了数据、网络结构、训练策略等多个模块的优化。 从算法改…

uniapp Vue2 获取电量的独家方法:绕过官方插件限制

在使用 uniapp 进行跨平台应用开发时,获取设备电量信息是一个常见的需求。然而,uniapp 官方提供的uni.getBatteryInfo方法存在一定的局限性,它不仅需要下载插件,而且目前仅支持 Vue3,这让使用 Vue2 进行开发的开发者陷…

Go语言中的if else控制语句

if else是Go语言中最基础也最常用的条件控制语句,用于根据条件执行不同的代码块。下面我将详细介绍Go语言中if else的各种用法和特性。 1. 基本语法 1.1. 最简单的if语句 if 条件表达式 {// 条件为true时执行的代码 } 示例: if x > 10 {fmt.Prin…

[Spring]-AOP

AOP场景 AOP: Aspect Oriented Programming (面向切面编程) OOP: Object Oriented Programming (面向对象编程) 场景设计 设计: 编写一个计算器接口和实现类,提供加减乘除四则运算 需求: 在加减乘除运算的时候需要记录操作日志(运算前参数、运算后结果)实现方案:…

Web3 借贷与清算机制全解析:链上金融的运行逻辑

Web3 借贷与清算机制全解析:链上金融的运行逻辑 超额抵押借款 例如,借款人用ETH为抵押借入DAI;借款人的ETH的价值一定是要超过DAI的价值;借款人可以任意自由的使用自己借出的DAI 稳定币 第一步:借款人需要去提供一定…

RK3588开发笔记-GNSS-RTK模块调试

目录 前言 一、什么是GNSS/RTK 二、硬件连接 三、内核配置 四、模块调试 五、ntripclient使用 总结 前言 在RK3588平台上集成高精度定位功能是许多工业级应用的需求。本文记录了我调试GNSS-RTK模块的全过程,包含硬件连接、驱动移植、数据解析和精度优化等关键环节,希望对…

Vue.js $emit的介绍和简单使用

前言 在 Vue.js 开发中,组件化是核心思想之一。但组件间的通信是一个重要课题,特别是子组件向父组件传递数据的场景。Vue 提供了多种通信方式,而$emit正是实现子→父通信的关键方法。本文将深入解析$emit的原理、使用场景及最佳实践。 一、$e…

【Linux 学习计划】-- 简易版shell编写

目录 思路 创建自己的命令行 获取用户命令 分割命令 检查是否是内建命令 cd命令实现 进程程序替换执行程序 总代码 结语 思路 int main() {while (1){// 1. 自己的命令行PrintCommandLine();// 2. 获取用户命令char command[SIZE];int n GetUserCommand(command, si…