1. 为什么要在 Cursor 里跑 Qt 项目
Qt 项目在 Windows 上默认的打开方式是 Qt Creator,但很多人日常写代码的主力编辑器其实是 Cursor。原因很直接:Cursor 基于 VS Code,启动快、占用低,长时间开着不卡;内置的 AI 补全和 Agent 模式在写 Qt 样板代码时特别省事,比如信号槽连接、QAbstractItemModel 的骨架、Q_PROPERTY 声明这些重复度高的东西,几句话就能生成。再加上 C++、Python、前端脚本都能在同一个窗口里处理,不用来回切工具。
问题在于,Qt 项目不是纯 C++ 项目,它有自己的 moc、uic、rcc 预处理流程,还有 MinGW 和 MSVC 两套工具链的差异。直接拿 Cursor 打开一个 Qt 工程,大概率会遇到「找不到 Qt 头文件」「CMake 配置失败」「点运行没反应」这类情况。这篇就聚焦在 Windows 上从零把 Qt + CMake 环境在 Cursor 里搭起来,覆盖 MinGW 与 MSVC 两套工具链的切换与选择,给出.vscode/tasks.json、settings.json和CMakePresets.json的可复制骨架,并完整演示一次编译、运行、断点调试的验证动作。
适合的读者是:从 Qt Creator 迁移过来、想用 Cursor 写 Qt 的人;或者本来就用 CMake 管 Qt 项目、但一直没在 Cursor 里跑通调试的人。下面所有配置都基于 Windows 10/11 64 位、Qt 5.14.2 或 Qt 6.x、CMake 3.21 以上、Cursor 2.x 版本,实测可跟做。
2. 前置准备:Qt、CMake 与 TaoToken 接入
2.1 工具链安装与环境变量
先确认三样东西装好:Qt SDK、CMake、以及 Cursor 本身。Qt 安装时记得勾选对应的编译器组件,MinGW 和 MSVC 可以都勾上,后面切换会用到。CMake 建议装 3.21 以上,因为CMakePresets.json的version 3需要这个版本起步。
装完之后配环境变量。右键「此电脑」→ 属性 → 高级系统设置 → 环境变量,在系统变量的Path里加入三条:Qt 的bin目录(比如D:\Qt\5.14.2\mingw73_64\bin)、CMake 的bin目录、以及 Cursor 的安装目录。配完重开一个终端,敲cmake --version和qmake --version能出版本号就说明通了。
注意:Qt 的
bin目录要选到具体套件那一层,比如mingw73_64\bin,不要只加到Qt\5.14.2。MSVC 套件同理,路径里带msvc2019_64这种字样。
2.2 在 Cursor 里装扩展
打开 Cursor,进扩展市场,搜两个关键扩展装上:CMake Tools(微软官方那个)和Qt Extension Pack或者单独的Qt C++相关扩展。CMake Tools 负责配置、构建、调试的整套流程,Qt 扩展负责.ui文件的可视化打开和 Qt 专属语法支持。
装完之后按F1,输入Qt: Register Qt Installation,选中 Qt 的大版本根目录,比如D:\Qt\5.14.2。这一步是让 Cursor 知道 Qt 装在哪,后面选构建套件时才能列出 MinGW 和 MSVC 的选项。注意必须选到版本根目录,不能选到mingw73_64这种子目录,否则识别不到。
2.3 TaoToken 在 Qt 开发里的位置
写 Qt 项目时经常需要 AI 帮忙生成重复代码,比如给一个 QTableView 配 model、写自定义 delegate、或者把一段旧代码从 Qt4 迁到 Qt5。Cursor 自带的 AI 能用,但如果想统一管理多个模型的调用、或者团队里共用一套 API 配置,可以接 TaoToken 做中转。
TaoToken 的接入方式很简单,拿到 API Key 之后,在 Cursor 的设置里找到模型配置,把 base URL 指向https://taotoken.net/api,填上 Key 就行。这样 Cursor 里的 AI 请求会走 TaoToken 转发,模型对话、代码补全都能用。如果你只是偶尔用 AI 写 Qt 代码,不接也完全没问题,下面的编译调试流程不依赖它。
需要 Key 的话去控制台建一个:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=console
3. 可复制配置:tasks.json、settings.json 与 CMakePresets.json
3.1 项目结构约定
假设你的 Qt 项目根目录叫QtDemo,结构大概是这样:
QtDemo/ ├── CMakeLists.txt ├── CMakePresets.json ├── main.cpp ├── mainwindow.cpp ├── mainwindow.h ├── mainwindow.ui └── .vscode/ ├── settings.json └── tasks.json.vscode文件夹放 Cursor 的工程级配置,CMakePresets.json放构建预设。两者配合,就能在 Cursor 里一键配置、构建、调试。
3.2 settings.json 骨架
在.vscode/settings.json里写:
{ "cmake.generator": "MinGW Makefiles", "cmake.buildDirectory": "${workspaceFolder}/build/${buildType}", "cmake.configureOnOpen": true, "cmake.sourceDirectory": "${workspaceFolder}", "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools", "files.associations": { "*.ui": "xml" } }这里cmake.generator是关键。用 MinGW 工具链时填MinGW Makefiles,用 MSVC 时改成Visual Studio 17 2022或者Ninja。cmake.buildDirectory把不同构建类型分开放,避免 Debug 和 Release 互相覆盖。cmake.configureOnOpen设成 true,打开项目自动跑一次配置,省得手动点。
3.3 tasks.json 骨架
.vscode/tasks.json定义构建任务,方便用快捷键触发:
{ "version": "2.0.0", "tasks": [ { "label": "cmake configure", "type": "shell", "command": "cmake", "args": [ "-S", "${workspaceFolder}", "-B", "${workspaceFolder}/build/Debug", "-G", "MinGW Makefiles", "-DCMAKE_BUILD_TYPE=Debug", "-DCMAKE_PREFIX_PATH=D:/Qt/5.14.2/mingw73_64" ], "problemMatcher": [] }, { "label": "cmake build", "type": "shell", "command": "cmake", "args": [ "--build", "${workspaceFolder}/build/Debug", "--config", "Debug", "-j", "8" ], "dependsOn": "cmake configure", "group": { "kind": "build", "isDefault": true }, "problemMatcher": ["$gcc"] } ] }CMAKE_PREFIX_PATH指向你的 Qt 套件目录,MinGW 就指mingw73_64,MSVC 就指msvc2019_64。这个参数是让 CMake 找到 Qt 的Qt5Config.cmake,不写的话find_package(Qt5)会失败。-j 8是并行编译核数,按你机器调整。
3.4 CMakePresets.json 骨架
如果不想在 tasks 里硬编码路径,用CMakePresets.json更干净:
{ "version": 3, "configurePresets": [ { "name": "mingw-debug", "generator": "MinGW Makefiles", "binaryDir": "${sourceDir}/build/mingw-debug", "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug", "CMAKE_PREFIX_PATH": "D:/Qt/5.14.2/mingw73_64" } }, { "name": "msvc-debug", "generator": "Visual Studio 17 2022", "binaryDir": "${sourceDir}/build/msvc-debug", "cacheVariables": { "CMAKE_BUILD_TYPE": "Debug", "CMAKE_PREFIX_PATH": "D:/Qt/5.14.2/msvc2019_64" } } ], "buildPresets": [ { "name": "mingw-debug", "configurePreset": "mingw-debug" }, { "name": "msvc-debug", "configurePreset": "msvc-debug" } ] }这样在 Cursor 里按F1输入CMake: Select Configure Preset,就能在mingw-debug和msvc-debug之间切换。切完之后再CMake: Configure,CMake Tools 会自动用对应的生成器和 Qt 路径。
3.5 CMakeLists.txt 里 Qt 的关键写法
不管用哪套工具链,CMakeLists.txt里 Qt 的部分是通用的:
cmake_minimum_required(VERSION 3.21) project(QtDemo LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) set(CMAKE_AUTORCC ON) find_package(Qt5 REQUIRED COMPONENTS Widgets) add_executable(QtDemo main.cpp mainwindow.cpp mainwindow.h mainwindow.ui ) target_link_libraries(QtDemo PRIVATE Qt5::Widgets)AUTOMOC、AUTOUIC、AUTORCC三个开关必须打开,否则.ui文件和带Q_OBJECT的类不会被正确处理,链接时会报undefined reference to vtable这类错。find_package的COMPONENTS按你实际用的模块加,比如Widgets、Network、Sql。
4. 验证请求:编译、运行与断点调试
4.1 一次完整的编译运行
配置写好后,在 Cursor 里按F1,依次执行CMake: Select Configure Preset→ 选mingw-debug→CMake: Configure。底部状态栏会显示配置进度,成功后出现Build按钮。点它或者按F7,开始编译。
编译输出里应该能看到 moc、uic 的调用记录,比如Automatic MOC for target QtDemo。如果一切正常,最后一行是[100%] Built target QtDemo。然后在终端里跑:
./build/mingw-debug/QtDemo.exe窗口弹出来,说明编译运行链路通了。如果用的是 MSVC 预设,可执行文件在build/msvc-debug/Debug/QtDemo.exe,路径多一层Debug,这是 Visual Studio 生成器的习惯。
4.2 断点调试配置
调试需要.vscode/launch.json,用 CMake Tools 的话可以自动生成。按F1输入CMake: Debug,它会根据当前预设创建调试配置。手动写的话大概是这样:
{ "version": "0.2.0", "configurations": [ { "name": "QtDemo (MinGW)", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/build/mingw-debug/QtDemo.exe", "args": [], "stopAtEntry": false, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "D:/Qt/5.14.2/mingw73_64/bin/gdb.exe", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] }miDebuggerPath指向 Qt 自带的 gdb,MinGW 套件里就有。MSVC 的话type换成cppvsdbg,MIMode不需要,调试器用 Visual Studio 的。在mainwindow.cpp的槽函数里打个断点,按F5启动调试,点界面上的按钮,应该能停在断点处,左侧变量面板能看到this、ui这些对象。
4.3 切换工具链的实操
想从 MinGW 切到 MSVC,不用改代码,只改预设。按F1→CMake: Select Configure Preset→ 选msvc-debug→CMake: Configure→CMake: Build。CMake Tools 会用 Visual Studio 生成器重新配置,Qt 路径自动指向msvc2019_64。
两套工具链的差异主要在:MinGW 用 gdb 调试、生成 Makefile;MSVC 用 Visual Studio 调试器、生成.sln。编译速度上 MSVC 通常快一些,但 MinGW 的二进制在 Windows 上依赖少、分发方便。日常开发建议固定一套,需要交叉验证时再切。
提示:切换预设后如果报「generator 不匹配」,先把
build目录删掉再配置。CMake 不允许同一个构建目录换生成器。
5. 本篇常见错排查
5.1 find_package(Qt5) 失败
报错长这样:Could not find a package configuration file provided by "Qt5Widgets"。原因基本是CMAKE_PREFIX_PATH没指对。检查CMakePresets.json或tasks.json里的路径,确认指向的是套件目录而不是 Qt 根目录。MinGW 是D:/Qt/5.14.2/mingw73_64,MSVC 是D:/Qt/5.14.2/msvc2019_64。路径里的斜杠用正斜杠或者双反斜杠,单反斜杠在 JSON 里会被当转义。
5.2 undefined reference to vtable
链接阶段报这个,通常是Q_OBJECT宏所在的类没有被 moc 处理。检查CMakeLists.txt里CMAKE_AUTOMOC是否为 ON,以及带Q_OBJECT的头文件是否加进了add_executable的源文件列表。AUTOMOC 需要能看到头文件才能生成 moc 代码,只写.cpp不写.h有时会漏。
5.3 调试时断点不生效
断点变成空心圆,提示「未绑定」。一般是调试配置里的program路径不对,或者编译时没加-g。MinGW 下确认CMAKE_BUILD_TYPE=Debug,MSVC 下确认配置的是 Debug 而不是 Release。另外miDebuggerPath要指向真实存在的 gdb,Qt 的 MinGW 套件里bin/gdb.exe是有的,如果用了系统里另一个 MinGW,版本可能对不上。
5.4 .ui 文件打不开可视化设计器
在 Cursor 里点.ui文件默认是 XML 文本。想用设计器,右键文件选Open this file with Qt Widgets Designer,或者按F1输入Qt: Open UI File。如果没这个选项,说明 Qt 扩展没装好,或者Qt: Register Qt Installation那步没做。设计器打开后改控件、保存,回到 Cursor 重新构建即可,uic 会自动重新生成ui_mainwindow.h。
5.5 CMake 配置缓存导致切换失败
从 MinGW 切 MSVC 时如果没删build目录,会报Generator ... does not match the generator used previously。解决办法就是删掉对应的构建目录再配置。用CMakePresets.json的话,两套预设的binaryDir是分开的,天然避免这个问题,这也是推荐用预设而不是手写 tasks 的原因之一。
6. 把 AI 接进 Qt 工作流
环境跑通之后,日常写 Qt 代码可以顺手用 Cursor 的 AI 能力。比如让它在mainwindow.cpp里生成一个QTableView加QStandardItemModel的初始化代码,或者把一段用connect老语法的信号槽改成函数指针写法。这些在 Cursor 里选中代码按Ctrl+K就能做。
如果想让 AI 请求走统一入口,把 Cursor 的模型配置指向 TaoToken 的 API 地址https://taotoken.net/api,Key 在控制台建。这样模型对话、代码补全、Agent 模式都能用同一套配置,换模型也不用改代码。需要长期跑编码任务或者 Agent 的话,可以看下 Coding Plan 的额度方案:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=coding-plan
接入文档在这里,里面有 Cursor 的具体填法:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=doc
Key 的创建入口:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=api-keys
想先试试模型对话效果,可以直接开这个页面:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=chat
整套配置下来,Cursor 跑 Qt 项目的体验已经能覆盖日常开发。编译、运行、断点调试都在一个窗口里完成,MinGW 和 MSVC 切换只改预设不改代码。踩过的坑主要集中在CMAKE_PREFIX_PATH和 moc 处理上,把这两处配对,后面基本不会再有环境问题。