1. 为什么要在 VS Code 里用 Cline 写 Qt 代码
Qt 开发长期依赖 Qt Creator,但它的 AI 补全能力一直偏弱。很多做桌面端的朋友现在更愿意把工程搬到 VS Code,用 Cline 这类插件让大模型直接读写文件、生成.h/.cpp/.ui三件套,再配合 CMake Tools 一键编译运行。问题也随之而来:Cline 默认要你填各家模型的 Key,Claude、GPT、DeepSeek 各一套,切换模型就得改配置,团队里几个人共用更是乱。
这篇就解决这一件事:在 VS Code 的 Cline 插件里,通过 TaoToken 统一 Key 和 API 通道,把settings.json配好,然后用一个 Qt 窗口类的生成请求验证连通性。适合已经在用 VS Code 写 C++/Qt、想给 Cline 接一个稳定入口的人。读完你能拿到一份可直接复制的配置骨架,知道每个字段填什么,也能自己判断请求到底通没通。
我试过把 Key 散落在多个插件配置里的做法,改一次要翻三四个文件,后来统一到一个通道就清爽多了。下面按配置顺序走。
2. TaoToken 前置准备:拿到统一 Key 和 API 地址
TaoToken 在这里扮演的是「统一入口」的角色:Cline 只认一个 API 地址和一个 Key,背后用哪个模型由你在请求里指定。这样你换模型不用动 Cline 的配置,只改请求参数。
你需要准备两样东西:
- API 地址:
https://taotoken.net/api(注意这个地址不带任何查询参数,直接填) - 一个 API Key:在控制台的 API Keys 页面创建
创建 Key 的入口在这里:
控制台:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite API Keys:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
进去之后点新建,复制那串sk-开头的字符串,先存到记事本里,后面要粘进settings.json。注意 Key 只显示一次,关掉页面就看不到了,别问我怎么知道的。
如果你还没决定用哪个模型,可以先在模型对话页面试一下,确认通道正常再往 Cline 里配:
模型对话:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
这一步不用装任何东西,浏览器里发一句话看有没有回复就行。确认能返回内容,说明 Key 和通道都没问题,再进下一步。
3. Cline 的 settings.json 配置骨架(可直接复制)
Cline 的配置在 VS Code 的设置里,但更稳的做法是直接改settings.json,因为图形界面偶尔会把自定义字段吞掉。打开方式:Ctrl+Shift+P→ 输入Open User Settings (JSON)。
下面是一份可复制的骨架,把apiKey换成你自己的:
{ "cline.apiProvider": "openai", "cline.openAiApiKey": "sk-你的TaoToken密钥", "cline.openAiBaseUrl": "https://taotoken.net/api", "cline.openAiModelId": "claude-sonnet-4-20250514", "cline.customInstructions": "生成 Qt 代码时使用 C++17,头文件用 #pragma once,信号槽使用新式语法。", "cline.autoApprovalSettings": { "enabled": true, "actions": { "readFiles": true, "editFiles": false, "runCommands": false } } }几个字段说明一下,别填错:
| 字段 | 填什么 | 说明 |
|---|---|---|
cline.apiProvider | openai | 走 OpenAI 兼容协议,TaoToken 兼容这套 |
cline.openAiApiKey | sk-... | 第 2 步拿到的 Key |
cline.openAiBaseUrl | https://taotoken.net/api | 统一入口地址,结尾不要加斜杠 |
cline.openAiModelId | 模型名 | 按你实际要用的模型填 |
cline.customInstructions | 自定义提示 | 让模型按 Qt 习惯写代码,很关键 |
autoApprovalSettings里我把editFiles和runCommands设成false,意思是模型可以读文件、但改文件和跑命令要你手动点确认。写 Qt 代码时模型偶尔会改错.pro或CMakeLists.txt,手动确认一下更安全。等你信任了再放开。
注意:
openAiBaseUrl结尾千万别加/,加了会拼成//v1/chat/completions,部分网关会 404。这个坑我踩过。
保存后重启一下 VS Code,让 Cline 重新读取配置。
4. 验证请求:让 Cline 生成一个 Qt 窗口类
配置对不对,发一个真实请求就知道。打开你的 Qt 工程(没有的话新建一个空的 CMake 工程也行),在 Cline 面板里输入下面这段提示词:
请生成一个 Qt Widgets 窗口类,文件名 mainwindow.h 和 mainwindow.cpp。 要求: 1. 继承 QMainWindow 2. 包含一个 QPushButton 和一个 QLabel 3. 点击按钮时,Label 显示当前时间 4. 使用新式信号槽语法 5. 头文件用 #pragma once如果配置正确,Cline 会开始流式输出代码,并在文件树里创建这两个文件。你会看到类似这样的返回:
// mainwindow.h #pragma once #include <QMainWindow> #include <QLabel> #include <QPushButton> class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); private slots: void onButtonClicked(); private: QLabel *m_label; QPushButton *m_button; };// mainwindow.cpp #include "mainwindow.h" #include <QDateTime> #include <QVBoxLayout> #include <QWidget> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), m_label(new QLabel("等待点击", this)), m_button(new QPushButton("显示时间", this)) { auto *central = new QWidget(this); auto *layout = new QVBoxLayout(central); layout->addWidget(m_label); layout->addWidget(m_button); setCentralWidget(central); connect(m_button, &QPushButton::clicked, this, &MainWindow::onButtonClicked); } void MainWindow::onButtonClicked() { m_label->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss")); }看到这段代码流式吐出来,就说明三件事都成了:Key 有效、API 地址正确、模型能正常返回。如果只转圈不出字,或者弹红色报错,直接看下一节。
想单独确认通道本身没问题,也可以绕过 Cline,用 curl 直接打一发:
curl https://taotoken.net/api/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-你的TaoToken密钥" \ -d '{ "model": "claude-sonnet-4-20250514", "messages": [{"role": "user", "content": "回复 ok"}] }'返回里有"content": "ok"就说明通道完全正常,问题只可能在 Cline 的配置字段上。
5. 本篇常见报错排查
配 Cline 时最容易卡在几个固定位置,对号入座。
报错一:401 Unauthorized
九成是 Key 错了。检查openAiApiKey有没有多余空格,sk-前缀在不在。如果 Key 是从网页复制的,注意别把换行也带进去。还有一种情况是 Key 被删了,去 API Keys 页面确认它还在。
报错二:404 Not Found
基本是openAiBaseUrl写错了。正确值是https://taotoken.net/api,不要加/v1,不要加结尾斜杠。Cline 会自己在后面拼/v1/chat/completions,你多写一段就重复了。
报错三:模型名无效 / model not found
openAiModelId填的模型名通道里没有。去模型对话页面看一下当前可用的模型名,原样复制过来,大小写和连字符都要一致。
报错四:Cline 不读配置,还是走默认
改完settings.json一定要重启 VS Code。另外确认你改的是「用户设置」还是「工作区设置」,如果工作区里有.vscode/settings.json,它会覆盖用户设置,两边都检查一下。
报错五:能返回代码但文件没创建
这是autoApprovalSettings里editFiles设成了false,模型在等你点确认。看 Cline 面板底部有没有「Approve」按钮,点一下就行。想让它自动写文件就把editFiles改成true。
报错六:生成的 Qt 代码编译不过
这通常不是通道问题,是模型没按你的 Qt 版本写。把customInstructions写细一点,比如注明「使用 Qt 5.15,不使用 Qt 6 专有 API」,再让它重新生成。
6. 长期用 Cline 写 Qt,建议走 Coding Plan
单次验证用按量计费没问题,但如果你打算长期在 VS Code 里用 Cline 写 Qt、甚至跑 Agent 自动改多个文件,按量计费的成本会飘。这种情况更适合 Coding Plan,额度固定,适合每天都要跟模型来回改代码的场景。
Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
接入文档里对 OpenAI 兼容协议的字段有完整说明,换其他插件也是同一套地址和 Key:
接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
配置这块,我的习惯是把customInstructions当成项目规范来维护,Qt 版本、命名风格、是否用.ui文件都写进去,这样每次生成不用重复交代。另外editFiles建议先手动确认跑一周,等你看清模型改文件的规律再放开自动,能省掉不少回滚的麻烦。