最近 Qt 官方丢出了一连串让开发者有点措手不及的消息:Qt Extension for VS Code 1.16.0 正式发布,MCP 工具随包登场,陪伴了一段时间的 Qt AI Assistant 正式退役,取而代之的是更开放的智能体式开发路线。如果你像我一样,日常既用 Qt Creator 又频繁流窜到 VS Code 里写 CMake、改 QML,这波更新你的确需要好好消化一下。这篇算是我的实测记录,不吹不黑,把新版本能做什么、MCP 怎么配、旧 AI Assistant 留下的坑在哪里,一条条捋清楚。
1. Qt Extension 1.16.0 到底带来了什么
1.1 从“补丁版”到“换打法”的一次更新
如果只看版本号,1.16.0 可能让人以为只是修了几个崩溃,换个图标之类的。实际用过之后你会发现,这次更新真正的大头不是那些零零碎碎的新增 API,而是把 VS Code 里的 Qt 开发体验从“编辑器 + 构建插件”的状态带到了“AI 智能体可以直接操作项目”的新阶段。
具体到功能清单,我知道很多人关心的是这么几条:
- 补齐了 CMake Presets 的同步,在 VS Code 里切 Kit、切构建类型终于不会再和 Qt Creator 打架;
- QML 语法分析更准确,尤其在处理 Singleton、内联组件和 qmldir 时不会乱报错;
- 调试配置增加了几套 Qt Quick 专用的 launch.json 模板,不用再手写
"type": "cppvsdbg"和qmlDebug参数; - 新的 MCP 工具正式发布,这才是这次更新的主菜。
单说前三条,其实都属于“本来应该早就做好”的事。真正让社区讨论炸锅的,是最后那条 MCP 工具。它就相当于 Qt 官方给 VS Code 装了一个“AI 接口”,让各种支持 MCP 的智能体客户端可以读取项目结构、触发构建、拿到编译错误,再根据错误直接修改代码。你可以把它理解为:AI 不再只是悬浮在侧边栏里陪你聊天的窗口,而是能伸手进入你的构建流程里干活的同事。
1.2 为什么 Qt 官方终于认真对待 VS Code
这背后的信号,比功能本身更值得琢磨。Qt 自己的 Qt Creator 当然是亲儿子,但 VS Code 在轻量编辑、远程开发、插件生态上的优势,已经让大量 Qt 工程师把它当成了事实上的第二 IDE。官方之前对 VS Code 的支持更像是在“维持”,每次更新都不痛不痒,但这几年 AI 辅助开发工具爆发,VS Code 成了各种 AI 插件的主战场,Qt 再不认真跟进,开发者就会被别的生态带着走了。
于是这一次更新,Qt 把赌注压在了开放协议上:与其做一个只属于 Qt 的 AI 助手,不如让 Qt 项目能被所有主流智能体工具调用。技术选型就是 MCP。VS Code 本身也早已支持 MCP Host,Qt Extension 1.16.0 里的 MCP 工具就是那个把 Qt 世界翻译给 AI 的中间层。这也是我后来才想明白的:AI Assistant 退役不是偶然,是为这条新路让位。
2. MCP 工具,到底解决什么问题
2.1 先花三分钟弄懂 MCP 的逻辑
MCP(Model Context Protocol,模型上下文协议)这个概念最近热度很高,但很多人还是似懂非懂。我打个比方:以前你和 AI 助手对话,中间隔着一堵墙,AI 只能看到你贴到聊天框里的文字,看不到你硬盘上的代码、终端里的报错、构建系统的配置。MCP 等于在墙上开了一个可编程的窗口,让 AI 客户端(Host)能通过一套标准协议,去调用各种各样的工具 Server,比如“读取某个文件”“运行 cmake --build”“查一下 Qt 文档”。
在这个体系里:
- VS Code 是 MCP Host,负责连接 AI 客户端和工具 Server;
- Qt Extension 1.16.0 附带的 MCP 工具是 Server,暴露一组 Qt 项目相关的能力;
- 你对话里的智能体(不管是 Claude Code、Codex、Continue 还是国内的各种 Agent 工具)是真正的“操作者”。
这个架构的好处是,AI 客户端和 Qt 工具链之间通过协议解耦。Qt 不需要为每个 AI 厂商单独做适配,AI 厂商也不需要知道 Qt 项目内部怎么组织。谁想支持 Qt,只要实现 MCP 协议就行。这就是为什么标题里会写“Qt 智能体式”——开发方式正从“人用 IDE + 助手”变成“人指挥智能体 + 智能体调用 IDE 工具”。
2.2 实际的开发流程会变成什么样
我实测下来最典型的一个场景是这样的:我在 VS Code 里打开一个 Qt Quick 项目,编译报错说某个Q_PROPERTY的类型不存在。以前我得自己盯着输出面板找文件、找行号,然后去查代码。现在直接让智能体看编译错误,智能体通过 MCP 工具拿到出错文件的内容,自己定位到问题,然后给出修复建议,甚至直接改掉。
更顺滑的是,MCP 不只有只读能力。它内置的构建工具可以真正触发增量编译,所以智能体改完代码之后,它还能再跑一次构建来验证。如果还有问题,它能继续读输出、继续修,直到编译通过。这个循环是真的在干活,不是给你贴一段大概率的代码让你自己折腾。当然,前提是项目本身能正常构建,MCP 只是把这个过程自动化了,它没法帮你把一堆历史遗留的构架问题瞬间变好。
这套东西落地之后,AI Assistant 那种“在侧边栏里一问一答”的形态就显得很笨重。你问它项目情况,它只能看你自己贴的内容;你让它改代码,它只能在独立的编辑器区块里生成新代码,再让你手动复制回去。MCP 时代的智能体是长在项目上下文里的,这差距不是功能层面的,是工作流层面的。
3. Qt AI Assistant 正式退役,别慌,但得迁移
3.1 旧时代结束的原因
Qt AI Assistant 从推出到现在,其实一直是“官方实验品”的姿态。它在某些固定场景下挺好用,比如解释 QML 哪里写错了,或者在 Qt Creator 里帮你生成一段样板代码。但问题是它太封闭了,不能连着企业内部的代码规范、不能读取你本地的构建缓存、也不能跟第三方的 AI 工具联动。更重要的是,当 MCP 生态起来之后,封闭助手注定会被开放协议取代。大家需要的不是一个“Qt 品牌的 ChatGPT”,而是一个能理解 Qt 项目上下文的通用智能体。
另一个让官方下定决心退役的原因,我觉得是维护成本。AI 领域的工具链更新太快,今天用的模型,明天就出了新的上下文协议,一个和 IDE 深度绑定的助手要跟上时代,成本太高。而 MCP 这条路线把成本分摊给了整个生态:Qt 只需要维护好用、稳、文档全的 Server,模型和智能体交给专业厂商。这是一个非常务实的取舍。
3.2 从 AI Assistant 迁到智能体工作流
如果你之前在用 Qt AI Assistant,这次退役之后不需要慌,迁移路径是清晰的:
- 卸载旧的 AI Assistant 扩展或插件;
- 清理它在配置文件里留下的快捷键和设置项;
- 在 VS Code 里安装/更新到 Qt Extension 1.16.0;
- 配置一个支持 MCP 的智能体客户端(下面会给详细方案);
- 让智能体通过 MCP 连接项目,开始干活。
我自己在迁移时踩过一个坑:旧插件卸载后,VS Code 里还残留了一些qt.ai.*的设置,会导致新扩展启动时读取到过期配置,MCP Server 一直连接不上。解决办法是把所有 key 为qt.ai的配置项都删掉,然后重启窗口。旧功能的迁移成本其实不高,重要的不是你少了什么,而是你愿意花多久适应新的协作方式。
我整理过一张对比表,帮你理解这次替换:
| 对比项 | 旧 Qt AI Assistant | 新 MCP + 智能体 |
|---|---|---|
| 上下文获取 | 依赖用户手动粘贴 | 通过 MCP 读取项目文件、输出、构建状态 |
| 可扩展性 | 官方固定能力 | 任何支持 MCP 的智能体都能接 |
| 代码修改 | 生成代码块,手动复制 | 可以直接改文件,触发构建验证 |
| 生态兼容 | 只绑 Qt 工具链 | VS Code、编辑器、终端里都能用 |
| 私有化部署 | 基本没有 | 可搭配本地模型,数据不出内网 |
4. 手把手配置 Qt Extension 1.16.0 与 MCP 工具
4.1 安装依赖和扩展
在动手之前,先把基础环境补齐。我这里列的是我实测过的组合,不一定是最新的,但一定能跑通:
- VS Code(务必更新到支持 MCP Host 的版本,建议 1.10 以上,实际上 2026 年主流的版本都没问题);
- Qt 5.15+ 或 Qt 6.x,我主力是 6.5 LTS;
- CMake 3.21+,Ninja 或 MinGW Makefiles;
- 编译器:Windows 上我用的 MSVC 2022,Linux 上是 GCC 11+;
- Python 3.9+(Qt 官方 MCP 工具目前依赖 Python 运行时)。
安装扩展时,直接在 VS Code 扩展市场搜 “Qt Extension” 就行。如果你在团队隔离网络里,需要离线安装,记得去 Qt 官方下载中心拿 vsix 安装包,然后执行:
code --install-extension qt-extension-1.16.0.vsix离线安装这一块我也吃过亏。你安装完扩展后,还要保证本机能访问 Qt 的安装路径。如果连 Qt 都是离线安装的,装 Qt 时要勾选你需要的模块,这个下面会细说。
安装完成后,打开命令面板,输入Qt: Configure Qt Path,指定你本机的 Qt 安装目录。然后重新加载窗口,扩展会扫描已安装的 Kit,并把它关联到 CMake 工具。
4.2 配置 MCP Server
这是这次更新的核心,也是大家最容易卡住的地方。Qt Extension 1.16.0 会把 MCP Server 作为一个可执行程序提供。我的方案是在 VS Code 的 MCP 配置里手动注册:
{ "mcp": { "servers": { "qt": { "command": "python", "args": [ "-m", "qt_mcp_server", "--project", "${workspaceFolder}" ], "env": { "QT_MCP_PORT": "0" } } } } }注意几点:
command不要直接写qt-mcp-server,除非你已经把它的可执行文件加到了PATH里。用python -m的方式更不容易踩路径的坑。- 如果你的 Qt 安装目录不在默认位置,需要在环境变量里配置
QT_MCP_INSTALLATION_PREFIX,否则 Server 启动后找不到 Qt 库。 --project参数一定要指向当前工作区根目录,否则智能体读到的项目结构和你的工程对不上。
保存配置后,打开 VS Code 的设置面板,找到 MCP 相关的页面,应该能看到qt这个 Server。点击启动,然后查看输出日志,确认它有没有成功注册。
日志里出现类似MCP server listening on stdio的字样,基本就成功了。接下来你可以打开一个支持 MCP 的智能体对话框,试试直接问它:“这个项目用的是什么 Qt 版本?”如果它能给出答案,说明它调用了 Qt MCP 工具,读到了 CMakeLists.txt 和 qt-cmake 信息。
4.3 Qt MCP Server 到底暴露了哪些工具
我翻了一下官方文档,再结合自己调用的体验,把 Qt MCP Server 目前比较常用的工具列出来。注意,不同小版本可能会有增减,但大方向不会变。
| 工具名称 | 作用 | 我常用的场景 |
|---|---|---|
read_project_structure | 读取工作区根目录的目录树 | 让智能体了解项目模块划分 |
read_file | 读取指定文件内容 | 分析 CMakeLists.txt、QML 文件、头文件 |
search_symbol | 在项目索引中查找符号引用 | 搜Q_PROPERTY、信号槽、类定义 |
run_build | 触发 CMake 构建,返回输出 | 让智能体改完代码后自行验证 |
query_qt_docs | 查询本地 Qt 文档 | 避免智能体胡编 Qt API |
get_compile_errors | 获取最近一次构建的错误列表 | 快速定位编译失败点 |
最让我意外的是query_qt_docs这个工具。以前让 AI 给你写 Qt 代码,最怕它一本正经地编一个不存在的 API。有了这个工具,智能体会先查本地文档再回答,准确率提升非常明显,尤其针对 Qt 6 里一些新加的模块,比如QtQuick3D和QtGrpc。
不过也要提醒一句:MCP Server 暴露的工具越多,越需要你给智能体设定清楚边界。比如你不想让它随意修改cmake相关文件,就明确告诉它“只能读,不能写”。多数支持 MCP 的智能体都支持这类指令约束。
4.4 用智能体完成一次真实的任务
配置好了,光问版本没意思。我来演示一个我最近经常让智能体干的活:在一个 Qt Quick 项目里创建一个可复用的圆角卡片组件,并绑定点击事件。
我只需要在对话框里输入:“请通过 MCP 查看当前项目结构,然后在components目录下新建一个RoundedCard.qml,提供一个title属性和点击信号,用 Qt Quick 的Rectangle和MouseArea实现。”
接下来我观察到的流程是这样的:智能体先调用read_project_structure确认components目录是否存在,如果没有就调用create_directory;然后调用read_file看一下某个已有 qml 文件里的代码风格;接着调用write_file创建新文件;最后调用run_build编译整个项目。
如果编译失败,它会把错误内容贴出来,并直接帮我修改。整个过程我基本没有手动切过文件。老实说,第一次看到它自己循环“读错误-改文件-再构建”的时候,我的感觉是:这不是加了个按钮,是我多了一个能干活的下属,虽然这个下属偶尔也会把代码改歪,但我只需要最后 review 一遍就行。
5. 常见问题与排查技巧实录
5.1 编译报错 unknown module in Qt: serialport
这个名字看起来像是 Qt 项目编译时的经典报错,但在 MCP 工作流里,它有一个更容易出现的场景:智能体自动生成的代码里用了QtSerialPort,比如:
#include <QSerialPort>但工程里没有启用serialport模块,在 CMakeLists.txt 里也找不到:
find_package(Qt6 REQUIRED COMPONENTS SerialPort) target_link_libraries(app PRIVATE Qt6::SerialPort)于是构建直接失败。这不是 MCP 的锅,而是因为智能体默认了你想要的功能都能用。解决方法是:你自己先在 CMake 里把模块加上,然后让智能体读取 CMakeLists.txt,再让它基于已启用的模块来写代码。一句话总结:MCP 工具能帮你提高效率,但它不会自动帮你装 Qt 模块。
如果用的是离线安装包,那要特别留意:安装 Qt 5.14 或者 6.x 时,在组件选择页面里要把 “Qt Serial Port” 勾上。很多精简版离线包默认只勾了 core、gui、quick,serialport 和 serialbus 需要手动选。这个坑我遇到不止一次。
5.2 MCP Server 启动后立刻退出
这是新版本里被问得最多的一个问题。通常有几种原因:
- Python 虚拟环境和扩展不匹配,
qt_mcp_server模块根本找不到; - Qt 路径环境变量没设置,Server 启动时报找不到 Qt 的配置;
- 工作区路径中包含中文或空格,
--project参数解析出错。
我的排查习惯是:先在终端里手动跑一次:
python -m qt_mcp_server --project /path/to/project如果手动能跑,VS Code 里连不上,问题多半出在配置的command或env上。把它放到 VS Code 的env里显式指定:
"env": { "PATH": "/usr/bin:/usr/local/bin", "QT_MCP_INSTALLATION_PREFIX": "C:/Qt/6.5.3/msvc2019_64" }然后重启 VS Code。还有一点,Windows 下如果你用 PowerShell,环境变量写法和 CMD 不一样,直接放进env对象是最保险的。
5.3 旧 AI Assistant 残留配置干扰新扩展
卸载旧插件后,VS Code 的 settings.json 里可能还留着不少qt.ai.*配置。新扩展在读取配置时碰到这些旧 key,虽然一般不至于崩溃,但某些版本会优先读取旧配置里的 “assistant mode”,导致 MCP 工具加载逻辑被跳过。你可以在 settings.json 里手动搜一下,把所有qt.ai.开头的配置删掉。
如果懒得一个个删,也可以直接重置扩展配置文件。不过这个操作会把其他 Qt 扩展的设置也一起清掉,我个人不太推荐,除非你本来就想从头配置。
5.4 顺手就能解决的其他高频问题
我顺手整理几个平时在水群里看到的高频问题,都和这次的版本相关:
- “qt离线安装包下载5.14”:如果你能联网,直接用在线安装器最稳;离线包要记得下载对应编译套件的 msvc 或 mingw 版本。
- “qt模拟鼠标点击事件”:用
QTest::mouseClick做单元测试最方便;如果是要在运行时模拟全局点击,Windows 用SendInput,Linux 需要 X11/XTest,智能体在生成这类代码时最好通过 MCP 读取你本机的平台宏判断逻辑。 - “qt绘图效率比较”:想在 QWidget 和 QML 之间对比性能,别只比 FPS,还要关注 backdrop 合成。智能体可以通过 MCP 找到你的渲染代码,然后把 QML 的
SceneGraph和 QWidget 的paintEvent耗时打出来对比。 - “qt unknown module in qt:serialport”我上面已经说了:先查模块有没有装,再查 CMake 有没有链。
这些都是实际开发中会遇到的问题,MCP 工具并不会神奇地帮你避免它们,但它能更快地帮你找到问题根源。至少你可以让智能体先检查模块是否安装,再把相关 CMake 片段给你贴出来,比你自己翻 Qt 文档快不少。
6. 最后说点真心话
这次更新最让我高兴的不是某个具体功能,而是 Qt 终于放下了“官方全家桶”的包袱,选择拥抱开放的 MCP 生态。AI Assistant 退役,看起来是砍掉了一个产品线,其实是把一个更强大的能力释放了出来。对我来说,工作流已经变成了:VS Code 负责代码编写和 MCP 连接,Qt Creator 负责需要深度调试时的兜底,终端里的智能体负责那些重复的、需要不断试错的任务。
最后给你一个小技巧:如果你想用“Qt 智能体式”开发得更顺手,务必在工作区根目录放一份AGENTS.md,把项目的构建命令、模块依赖、代码风格写清楚。支持 MCP 的智能体会优先读取这个文件来理解项目,这比你每次都在对话框里反复解释要高效得多。这个习惯我用了一个月,项目接手速度明显快了一截。工具在变,但“把上下文准备好”这件事永远值得做。