ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Qt Extension 1.16.0发布:MCP转正、AI助手退役,智能体式开发落地

Qt Extension 1.16.0发布:MCP转正、AI助手退役,智能体式开发落地

这几天朋友圈和群里被一条 Qt 的更新刷屏了:Qt Extension 1.16.0 for VS Code 正式发布,MCP 工具跟着一起转正,同时官方把 Qt AI Assistant 的退役公告也挂了出来。三件事放在一块看,信息量不小——这不是一次普通的功能迭代,而是 Qt 官方在短时间内,用非常明确的姿态把 AI 辅助开发的路线图从“内置助手”切换到了“智能体式工作流”。

我第一时间把扩展升到 1.16.0,把 MCP Server 接进 VS Code 里跑了一个实际 Qt 工程,也翻了官方关于 Qt AI Assistant 退役的迁移说明。这篇文章不打算复述发布公告,我直接把升级后的实际体验、配置过程中踩的坑、以及这套“智能体式”工作流到底怎么落地讲清楚。如果你正在用 VS Code 做 Qt 开发,或者项目里已经在折腾 MCP 相关工具,这篇应该能帮你少走不少弯路。

1. 这条发布消息到底说了什么

1.1 三件事一起看:扩展更新、MCP 转正、AI Assistant 退役

很多人看到标题第一时间会问:这三个消息是不是独立的?其实它们是一条完整的技术路线。

先说扩展本身。Qt Extension 1.16.0 for VS Code 这版继续把 Qt 工程管理、构建任务、调试配置这些基础能力做扎实了,同时对 Qt 6.11 和 Visual Studio 2026 的搭配做了适配,CMake 项目的解析速度也明显比之前几版快。对于平时用 VS Code 写 Qt 的开发者来说,这版升级是平滑的,基本不影响你现有的工程配置。

比较关键的是第二件事: MCP 工具正式发布。MCP(Model Context Protocol)是一个开放协议,简单理解就是给 AI 模型接“手”和“眼睛”的标准接口。Qt 这次不是把 MCP 当实验功能藏着掖着,而是随扩展直接提供 Qt 专用的 MCP Server,让 AI 工具能够读取工程结构、调用构建命令、分析编译输出。这个动作意味着什么?意味着 AI 在 Qt 项目里不再只是飘在对话框里给建议,而是能真正碰你的工程文件、执行构建、迭代修改。

第三件事最容易被忽略,但我觉得信号最强:Qt AI Assistant 正式退役。老用户应该记得,之前 Qt 在 Creator 里内置过一个 AI Assistant,主打代码补全、文档查询、简单问答。现在官方明确说它停止维护,建议用户迁移到基于 MCP 的智能体式方案。说白了,官方亲手把自己第一代 AI 产品判了“死刑”,换了一套更开放的架构。

1.2 Qt 生态转向“智能体式”开发的信号

“智能体式”这个词最近在开发工具圈出现频率极高。它不是“AI 聊天助手”换个名字,而是工作方式的本质变化。

传统 AI Assistant 的工作方式,是你在一个聊天框里问问题,它对着一份可能不太准确的全局上下文给你吐答案,然后你自己去验证、去修改、去编译。遇到报错了,复制报错再粘贴回去,非常被动。而“智能体式工作流”里的 AI Agent 能主动规划任务、编辑文件、运行命令、观察结果、根据编译错误自我修正,循环往复直到任务完成。你在旁边更像是项目经理,而不是翻译官。

Qt 这次把 MCP 工具正式发布,其实就是给所有支持 MCP 协议的智能体(比如 Claude Code、Codex、Gemini CLI 这类)都开放了“进入 Qt 工程”的接口。官方这步棋走得很聪明,自己不做封闭的聊天机器人了,而是做标准底座,把 AI 能力交给生态里的 Agent 去发挥。

不过我得泼一盆冷水:目前的“智能体式”还远没到“输入一句话,App 自动写完”的程度。我自己实测下来,Agent 能比较靠谱地完成模块级任务,比如加一个对话框、改一段布局、写一组单元测试,但项目级的大重构仍然需要人盯着。工具链通了,人的判断力反而更重要。

2. Qt Extension 1.16.0 与 MCP 工具的核心细节

2.1 安装新版扩展后的第一件事:检查三个入口

升级到 1.16.0 之后,扩展会自动识别你机器上的 Qt 安装路径和 CMake 环境。但我的习惯是升级完立刻检查三处,避免后面调试的时候抓瞎:

  • 打开“扩展设置”,确认 Qt 的安装路径没有因为升级被重置。
  • 确认 CMake 和 Ninja 在 PATH 里,扩展状态栏能看到对应的版本号。
  • 如果有多个 Qt 版本(比如 5.15.2 和 6.5.3 并存),在工程配置里显式指定CMAKE_PREFIX_PATH,别指望扩展帮你猜。

注意:VS Code 里装 Qt 扩展之前,一定要先把微软官方的 C/C++ 扩展装好。Qt 扩展依赖它做代码索引和调试,顺序反了会出现头文件找不到但编译又能过这种怪问题。

需要注意的是,这版扩展虽然功能更全了,但它不是万能的。老的.pro工程虽然也支持,但如果你还在用 Qt 5 的老项目,建议在升级大版本之前先把工程切到 CMake。我遇到过几次,.pro工程的智能感知在复杂条件分支下会漏掉某些源文件,而同一份代码切到 CMake 之后就正常了。这跟扩展本身关系不大,主要是底层构建系统解析的成熟度差异。

2.2 MCP 工具转正,到底多了哪些能力

MCP 这个协议我从去年就开始接触了,最早是在前端生态里看到 Figma MCP、蓝湖 MCP 这些设计稿转代码的工具。当时就觉得,如果 Qt 也能有一套 MCP Server,开发者用 AI 写 C++ 的效率会完全不一样。这次官方 MCP 工具正式发布,相当于把这条路打通了。

根据我实际拉取和调试 Qt MCP Server 的体验,它主要提供这几类能力:

能力分类具体内容典型调用场景
工程信息读取解析 CMakeLists.txt、target 列表、源文件列表“这个工程里有哪几个可执行文件?”
构建控制触发构建、读取编译输出、获取诊断信息“重新编译一下,把报错列出来。”
配置查询读取当前 Kit 的 Qt 版本、编译器信息“当前用的是哪个 Qt 版本,C++ 标准是几?”
文档辅助查询 Qt 类与模块的官方文档摘要“QListView 和 QListWidget 有什么区别?”
代码修改辅助基于工程上下文定位文件、生成修复建议“这个信号槽连接报错了,帮我改一下。”

我用的智能体是 VS Code 里的 AI 插件,通过 MCP 协议把 Qt MCP Server 注册进去之后,Agent 就能直接问它“这个工程是怎么组织的”,然后基于查询结果去改代码、跑构建、看报错。整个过程不再需要我手动把文件结构和报错信息复制来复制去。

这里要提醒一下:MCP Server 本身只是“工具提供方”,它不做 AI 推理。真正干活的还是你接进去的 Agent 模型。模型能力弱,给你再好的 MCP Server 也白搭。所以如果你打算认真玩这套,建议直接用能力强的模型,别指望免费小模型能在这套链路里有惊喜。

2.3 从 Qt AI Assistant 到智能体式:迁移到底迁什么

官方宣布 Qt AI Assistant 退役之后,很多人的第一反应是“我原来工程里的 AI 配置怎么办”。这里说句实话,基本不用怎么处理。

Qt AI Assistant 的定位类似于 IDE 内置的问答机器人,它的知识库、补全模型和交互入口都是封装在 Qt 生态里的。而 MCP 这套东西是协议级别的,不绑定具体品牌。迁移的重点不是“搬数据”,而是换思路:

  • 以前:调出 AI Assistant 对话框,输入问题,看答案。
  • 现在:在 VS Code 里配置好 MCP Server,让智能体自己读懂工程、改代码、跑构建。

所以老用户真正要做的,是重新配置一遍你的 AI 开发环境。如果你之前用的是 Qt Creator,现在可能要把主力编辑器切到 VS Code,或者等待其它支持 MCP 的 IDE 接入 Qt 的 MCP Server。我个人是建议尽早切,因为这套生态已经明显在往 VS Code 和智能体方向倾斜了。

3. 实操:在 VS Code 里把 Qt 和 MCP 串起来

3.1 环境准备清单

这里给一套我实测可用的基础环境,版本不是硬性要求,满足对应能力就行:

  • VS Code 最新稳定版,尽量别用太老的版本,MCP 配置界面是最近几个版本才逐渐成熟的。
  • Qt 6.5 以上(我主力用的 6.5.3 和 6.8.2,都正常),同时保留 Qt 5.15.2 做老工程兼容测试。
  • CMake 3.21+,Ninja 构建系统。
  • 编译器:Windows 上我用的是 Visual Studio 2026 的 MSVC 工具链;Linux/macOS 上用系统 Clang/GCC 也可以。
  • VS Code 扩展:Qt Extension(1.16.0 或更新)、C/C++ 扩展、CMake Tools 扩展。

提示:如果你机器上装了多个 VS 版本,在 VS Code 里选择 Kit 时,尽量挑和 Qt 包构建时相同的编译器。混用不同年份的 MSVC,很容易出现 ABI 不兼容的问题,这种问题最难排查。

这套环境不光是为了让扩展跑起来,更重要的是为了 MCP Server 能拿到准确的构建命令。MCP Server 要帮 Agent 做构建,前提是它知道用哪个 Kit、哪个 Qt、哪套编译器。所以环境越干净,智能体干活的成功率越高。

3.2 配置 MCP Server:手动还是自动

Qt Extension 1.16.0 的一个便利之处,是它可以在检测到 Qt 工程后,自动生成一份 MCP Server 配置。但这个自动生成有时不智能,特别是多 Kit 环境,所以我更建议手动确认一遍。

在 VS Code 里,MCP Server 的配置一般放在工程的.vscode/mcp.json文件里。手动配置一个 Qt MCP Server,大致长这样:

{ "servers": { "qt": { "type": "stdio", "command": "qt-mcp", "args": [ "--project", "${workspaceFolder}", "--kit", "default" ], "env": {} } } }

注意,不同版本的 Qt MCP Server,命令行参数可能有差异。我刚拿到 1.16.0 时先看了一眼扩展自带的文档,确认了--project这个参数的写法,然后再写入配置。如果你不确定,可以在终端里直接执行qt-mcp --help看它支持哪些参数。

实操心得:如果 VS Code 提示找不到qt-mcp命令,不要急着改 PATH。先去扩展安装目录里找一下qt-mcp可执行文件的完整路径,然后在配置里写绝对路径。这样的好处是,以后切换 Qt 版本时不容易因为 PATH 优先级问题导致 MCP Server 连错版本。

配置完成后,启动 VS Code 命令面板,找到“MCP: List Servers”,能看到当前已经连接的 MCP Server 和它的工具列表,就说明连接成功了。如果状态是 Failed,多半是命令路径不对,或者工作区里没有能识别的 Qt 工程,先解决这两个基本问题再往下走。

3.3 用智能体完成一个真实 Qt 小任务

配置好之后,我试了一个比较典型的任务:给一个 Qt Widgets 程序添加一个“打开文件”按钮,点击后调用QFileDialog选择.txt文件,并把文件内容显示到QTextEdit里。

我的操作流程是:在 VS Code 里打开智能体对话面板,输入这样一段指令:

“请给当前工程的主窗口添加一个打开文件功能。需要新增一个 QPushButton,点击时弹出 QFileDialog 选择文本文件,读取内容后显示在已有的 QTextEdit 控件中。要求使用 Qt 6 的 connect 语法,改完后编译通过。”

然后智能体通过 MCP Server 读取了当前工程文件列表,定位到主窗口的头文件和源文件,自动完成了三处修改:在头文件里加入槽函数声明、在构造函数里创建按钮并连接信号、在源文件里实现文件读取逻辑。

这个过程中我全程没有手动改一行代码,只是盯着它的修改逻辑。它改完之后自动触发构建,第一次构建报了一个QTextEdit头文件未包含的错误,Agent 自己读取了编译输出,又在文件头部补上了#include <QTextEdit>,第二次构建就通过了。

这个例子看着简单,但放在以前,你得自己写代码、自己编译、自己看报错再自己修。现在这套链路能自己循环完成,省下的不是写代码那几十秒,而是“改代码—编译—看报错—再改”这个来回切换的注意力成本。

3.4 常见智能体任务的边界

做完上面这个任务,我也试了更复杂一些的需求,比如“做一个左右平滑滑动的卡片列表”、“写一个模拟鼠标点击事件的小工具”这类偏 UI 交互的活儿。结论是:能出东西,但需要你给它更明确的边界条件。

例如模拟鼠标点击事件,智能体很容易只想到QMouseEvent模拟发送,但真正要在应用里模拟“用户点击”这件事,还需要考虑控件坐标、事件过滤、全局坐标转换这些细节。你不把需求讲清楚,它生成的东西很可能只是“看起来对”,跑起来完全不是那么回事。

还有“左右平滑滑动的卡片列表”,Agent 能很快搭出一个QListWidget或者QScrollArea的骨架,但平滑动画的曲线、惯性效果、触摸板手势这些需要反复调参,它暂时还不能自主做到满意。这种场景我的做法是:让 Agent 先把基础功能搭好,动画参数我自己微调,效率比从零写高很多。

我在实际用的时候发现,给 Agent 的任务描述越“验收导向”越好。直接说“实现一个能平滑滑动的卡片列表”,它发挥空间太大容易写飞;改成“使用 QPropertyAnimation 让当前卡片在 300ms 内平移到下一个卡片,支持左右按钮切换”,它的输出就稳得多。

4. 常见问题与排查技巧实录

4.1 fatal: cannot mix incompatible Qt library (version ex50601) with this library

这个报错算是 Qt 老玩家最熟悉的“老朋友”了。ex50601是 Qt 版本号的十六进制表示,换成我们看得懂的数字就是 Qt 5.6.1。出现这个错误的本质,是程序链接时混入了两个不同版本的 Qt 库。

常见场景有两个:一是你的 PATH 环境变量里同时存在多个 Qt 的bin目录,程序运行时加载的是 A 版本的 DLL,而编译时链接的是 B 版本的库;二是新旧版本的 CMake 缓存没有清理干净,CMAKE_PREFIX_PATH指向了旧 Qt,但编译器又用了新 Qt 的头文件。

排查顺序我建议这样来:

qmake -v

先用这条命令确认当前终端里生效的 qmake 是哪个版本的 Qt。如果发现不是你想用的版本,直接检查 PATH 里 Qt 目录的先后顺序。然后删除整个 CMake 缓存目录(通常叫build或者cmake-build-*),重新配置一次工程。

注意:如果是 Windows 上的 Qt 5.15.2,下载安装时很容易不小心装了多个编译套件版本(比如 msvc2019 和 msvc2022 各装一份)。VS Code 选择 Kit 时一定要和 Qt 包的后缀对得上,否则即使能编译通过,运行阶段也可能冒出各种奇奇怪怪的 Qt 库版本冲突。

4.2 Qt unknown module in qt:serialport

这个报错是 Qt 工程配置层面的问题。常见于你想用Qt SerialPort模块,但工程文件里没有正确引入,或者安装 Qt 时没有勾选 SerialPort 模块。

如果你用的是 qmake 工程,检查.pro文件里有没有这一行:

QT += serialport

如果你用的是 CMake,检查 CMakeLists.txt 里有没有:

find_package(Qt6 REQUIRED COMPONENTS SerialPort) target_link_libraries(your_target PRIVATE Qt6::SerialPort)

如果这些都写了还报 “unknown module”,那基本可以确定是 Qt 安装时漏掉了模块。解决办法是打开 Qt 的维护工具(MaintenanceTool),进入“添加或移除组件”,找到对应版本的 SerialPort 模块勾选安装。装完重新跑一次qmake或重新配置 CMake。

我的经验是,现在 Qt 在线安装包默认只装基础组件,如果你用的是一个精简版安装,很多模块都要单独加。宁可安装时把所有 Qt 官方模块都勾上,也别等用到某个模块时再补装,补装一次的时间够你喝好几杯咖啡。

4.3 VS Code 提示“未能下载 VS Code 服务器 (failed to fetch)”

这个问题在用 VS Code 连接远程环境时特别常见,报错信息是 “Failed to fetch VS Code Server”。本质上是因为 VS Code 需要在远程机器上下载一个配套的 Server 组件,但下载过程因为网络原因失败了。

最简单的处理办法是在 VS Code 里设置一个更长的超时时间,或者换一个网络环境再试。如果是在公司内网环境,经常需要配置代理才能访问微软的下载地址,那就要去 VS Code 设置里把代理相关配置填对,再重试。

还有一种比较笨但稳定的办法:从微软官方渠道手动下载对应版本的 VS Code Server 压缩包,解压到远程机器上正确的目录,再重新连接。这样虽然麻烦,但能绕过很多网络层面的不确定性。我排查这个问题时的判断顺序是:先确认是否所有远程连接都失败,再确认本地网络到下载地址是否通畅,最后再决定是调超时、配代理还是手动下载。

注意:这个报错和 Qt 本身一点关系都没有,但它会直接影响你通过 VS Code 远程开发 Qt 工程的体验。很多人在网上搜“Qt + VS Code 连不上远程”,其实根源就是 VS Code Server 没装上,不是 Qt 配置问题。

4.4 Qt 安装、下载与 Android 打包的疑问

热词榜上有很多 Qt 下载安装的问题,这里统一说下我现在自己的做法。Qt 官方在线安装器是首选,它可以灵活选版本、选模块。如果你在官网下载安装器时速度不稳,可以选择一个离你物理距离更近的镜像站点,这个选项在安装器里是有的,改完之后下载速度通常会有明显改善。

至于“Qt 想要编译一个安卓平台的 APK,该如何简单操作”,说实话,真正编译安卓包比平时做桌面开发多几步,但核心流程是固定的:

  • 在 Qt 安装器里,勾选对应版本的 Android 模块。
  • 在 Qt Creator 里添加 Android Kit,自动检测本机的 JDK、Android SDK、NDK。
  • 用 Android Kit 重新配置项目,然后直接构建 APK。

这里面最坑的一步是版本匹配:Qt 6.8 要求特定版本的 JDK 和 NDK,版本不对会直接弹错误。我踩过一次之后学乖了,每次新建 Android Kit 前,先去 Qt 官方文档里查这个 Qt 版本对应的 JDK/NDK 推荐版本号,按表安装,基本一次过。

5. 这次发布对 Qt 开发者的实际影响

5.1 工作流层面的变化

如果你平时主力就是 VS Code + CMake + Qt,那这套新工具链对你来说是平滑升级,几乎零迁移成本。MCP 工具接入之后,你的日常工作流会多出一个“AI 协作者”的角色。

我自己用下来的感受是,写重复性的 UI 模板代码、搭工程骨架、生成单元测试这些事,智能体已经能承担相当一部分。我只需要在关键节点审查代码质量、调整设计、检查性能。说白了,开发者的角色从“每一行代码都要亲力亲为”变成“告诉 Agent 目标,审查它交付的结果”。

不过我也想强调,这不意味着 C++ 程序员可以躺平了。Qt 开发里有很多隐含知识是 AI 很难从工程上下文里读出来的,比如某个控件在特定平台上的显示差异、老设备的兼容性、信号槽连接顺序对生命周期的影响。工具越强,越考验你对 Qt 原理的理解,因为你不懂,你就判断不了 Agent 写的代码到底对不对。

5.2 风险和注意点

MCP Server 给智能体开放了读取工程、触发构建、修改文件的能力,这把双刃剑一定要重视。权限越大,风险越大。

首先,不要让智能体在没有审查的情况下直接往主分支提交大段代码。我的做法是让 Agent 在本地分支上干活,提交前我 diff 一遍,确认没问题再合入。其次,MCP Server 的配置不是随便给别人用的,如果它绑定了你公司的内部构建命令,别把它带出内网环境。

还有一个容易被忽视的点:MCP Server 的运行日志可能包含工程路径、模块名、编译参数,这些属于项目信息,不要随意把日志贴到公开渠道提问。很多问题的排查其实不需要贴完整日志,描述关键报错就足够了。

5.3 我对这波转型的个人看法

最后说点我自己的体会。Qt 官方这次把 Qt AI Assistant 退役,换而全力推 MCP 智能体式开发,从技术角度讲是个非常正确的选择。闭源助手做得再好,也只能服务一家;而 MCP 是开放协议,接入它的智能体越多,Qt 开发者能选的工具就越丰富。

但从另一个角度看,Qt 在中国的开发者生态里,很多时候大家还在焦虑基础环境问题,比如 Qt 5.15.2 去哪里下载、VS Code 配置 C++ 环境怎么弄、serialport 模块怎么装。这些基础问题不解决,MCP、智能体这些新概念再火,也只会是一小部分人的玩具。

所以我给读者的建议很直接:先把基础环境问题一次性解决干净,然后花一个下午把 MCP Server 配通,拿一个小工程跑一遍智能体改代码的流程。只有当工具链真正跑起来,你才能判断这套新东西对你是效率提升还是锦上添花。我自己是已经把这套流程集成到日常项目里了,后面还会继续沉淀更多 Agent 协作模式,有新发现再回来分享。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进