news 2026/9/29 10:14:22

Cusor:在Cursor中编译运行Qt项目的配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cusor:在Cursor中编译运行Qt项目的配置

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 处理上,把这两处配对,后面基本不会再有环境问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 10:13:05

Terraform模板安全审计流水线:将合规检查前置到代码阶段

1. 为什么我建议把审计逻辑前置到模板阶段上个月我帮团队搭了一套Terraform模板的安全合规性自动化审计流水线,目标是让所有基础设施代码在合并之前先过一轮机器审计。以前我们的安全合规检查主要靠云控制台人工点选,模板改了没人记得同步基线&#xff1…

作者头像 李华
网站建设 2026/9/28 9:22:36

Node.js+Vue构建云上水果商城:全栈开发与部署实践

最近在做一个基于Node.js和Vue的云上新鲜水果超市商城系统,内部代号g0a71。这个项目不是一个什么重量级电商平台,而是面向中小型生鲜商家的一条线上化方案。从用户端的水果浏览、购物车,到管理端的订单处理、商品上下架,再到云服务…

作者头像 李华
网站建设 2026/9/28 9:22:17

Node.js+Vue实战:从零搭建幼儿园管理系统全攻略

做幼儿园管理系统这个项目(内部代号 elx46),前后断断续续花了三周时间。技术栈选的就是 Node.js 加 Vue,后端用 Node.js 提供接口,前端用 Vue 写管理后台,给一家小型私立幼儿园搭了一套真正能跑起来的日常管…

作者头像 李华
网站建设 2026/9/28 9:22:17

心理咨询问答语料库实战:从数据清洗到检索式与生成式对话系统

简介:这份资源是面向人工智能问答系统开发者的中文心理咨询语料库,聚焦情感支持与聊天机器人场景,适合从事对话系统、意图分类或多轮问答研究的学习者与工程师使用。压缩包共8个文件,以Python脚本为主,辅以示例图片、S…

作者头像 李华
网站建设 2026/9/28 9:22:16

Spring Boot 3.4.x升级踩坑实录:自动配置、序列化与数据源问题详解

把项目从Spring Boot 3.3.x升到3.4.x那天,我心里想的是“不过是个小版本升级,改改版本号就完事了”。结果当天下午就被现实教育了:启动阶段先报了一个配置类找不到Bean的错误,解决完启动,接口返回的时间格式又不对了&a…

作者头像 李华
网站建设 2026/9/28 9:21:24

OpenHarmony标准系统chip_ckm分区打包与内核ko编译适配指南

做OpenHarmony标准系统的设备适配,kernel ko编译和分区打包几乎是每个BSP工程师都绕不开的日常操作。标题这句话压缩了整套流程:先绕过各种配置陷阱,把目标驱动编成可加载的内核模块(ko),再把它塞进chip_ck…

作者头像 李华