c++ QT代码提示问题

你的运行环境(版本号「点击帮助-关于-复制」):

TRAE CN
版本: 3.3.53
VSCode 版本: 1.107.1
提交: 29284ef8d129bac665838dd911f3834a41b9bf37
日期: 2026-04-20T10:08:29.577Z
Electron: 39.2.7-release.1.32.2 (aha)
Node.js: 22.21.1
V8: 14.2.231.25-electron.0
OS: Windows_NT x64 10.0.22631
构建版本: 2.3.21082
设备ID: 20338d489d6a1edb3fc19b66cbdb27edecb163dda70fb3c608c98c0800053c10
Device Id: 2209396746881692

问题描述(你遇到了什么问题?):

我安装了QT以及C++、Kylin Clangd,clang也安装到我电脑了,我想配置一下代码跳转功能,目前写了一个测试工程,cmake编译通过且运行正常,代码也可以跳转,但是不知道为什么Clangd似乎在报错,如图:

一直有一些红色报错的波浪线,意思好像是找不到QT的各种模块,但是却能跳转进去
此外还有一个问题,我无法右键删除build文件夹,Trae IDE似乎会占用这个文件夹,如图:


Trae打开的情况下,win11自带的资源管理器也无法删除此文件夹

1 个赞

你遇到的是两个经典的 C++/QT 开发问题。

先说第一个:Clangd 报红但能跳转,说明你的 compile_commands.json 里可能少了 QT 相关的路径。你先看一下项目根目录(或 build 目录)有没有 compile_commands.json?cmake 命令是不是加了 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON

第二个问题:build 文件夹被占用,通常是终端进程还在跑编译或没退出,或者语言服务在引用 build 目录里的文件。你可以先看看有没有正在运行的任务(终端、构建任务),或者试试先 Reload Window 再删除?

先跟我确认下 compile_commands.json 的情况,我再继续帮你排查下一步?

1 个赞

您好,看起来像是多个相同作用的语言插件之间不兼容导致,尝试留一个使用

1 个赞

这是我的Cmakelists.txt:

cmake_minimum_required(VERSION 3.16)

set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

# 项目名称
project(MCOM)

# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 查找Qt6核心模块(Widgets=窗口界面)
find_package(Qt6 REQUIRED COMPONENTS Widgets)

# 自动处理Qt信号槽(必须加)
set(CMAKE_AUTOMOC ON)

# 生成可执行文件
add_executable(MCOM main.cpp)

# 链接Qt库
target_link_libraries(MCOM PRIVATE Qt6::Widgets)

你说的-DCMAKE_EXPORT_COMPILE_COMMANDS=ON我没有加,但是我的第二行有set(CMAKE_EXPORT_COMPILE_COMMANDS ON),我不确定这个是否可以

此外build下有compile_commands.json文件,但compile_commands.json确实没有QT路径:

[

  {
    “directory”: “C:/WorkSpace/Embedded/MCOM/MCOM/build”,
    
    “command”: “C:\\Software\\MinGW\\mingw64_13_2\\bin\\g++.exe -DMINGW_HAS_SECURE_API=1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DUNICODE -DWIN32 -DWIN64 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_UNICODE -D_WIN64 @CMakeFiles/MCOM.dir/includes_CXX.rsp -g -std=gnu++17 -pthread -o CMakeFiles\\MCOM.dir\\MCOM_autogen\\mocs_compilation.cpp.obj -c C:\\WorkSpace\\Embedded\\MCOM\\MCOM\\build\\MCOM_autogen\\mocs_compilation.cpp”,
    
    “file”: “C:/WorkSpace/Embedded/MCOM/MCOM/build/MCOM_autogen/mocs_compilation.cpp”,
    
    “output”: “CMakeFiles/MCOM.dir/MCOM_autogen/mocs_compilation.cpp.obj”
  },
  
  {
    “directory”: “C:/WorkSpace/Embedded/MCOM/MCOM/build”,
    
    “command”: “C:\\Software\\MinGW\\mingw64_13_2\\bin\\g++.exe -DMINGW_HAS_SECURE_API=1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_WIDGETS_LIB -DUNICODE -DWIN32 -DWIN64 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -D_UNICODE -D_WIN64 @CMakeFiles/MCOM.dir/includes_CXX.rsp -g -std=gnu++17 -pthread -o CMakeFiles\\MCOM.dir\\main.cpp.obj -c C:\\WorkSpace\\Embedded\\MCOM\\MCOM\\main.cpp”,
    
    “file”: “C:/WorkSpace/Embedded/MCOM/MCOM/main.cpp”,
    
    “output”: “CMakeFiles/MCOM.dir/main.cpp.obj”
  }

]


目前我只有这五个插件
扩展商店还能搜索到另一个Clangd插件,这个我安装测试过,甚至连跳转都做不到

1 个赞

此外问题2也没有解决,我把Trae IDE关闭重新打开,不做任何操作的情况下直接删除build文件夹,仍然失败,报的错仍然是:


我在删除文件夹前也确认了终端输出如下:

[cmake] -- Configuring done (0.2s)

[cmake] -- Generating done (0.0s)

[cmake] -- Build files have been written to: C:/WorkSpace/Embedded/MCOM/MCOM/build

之后我才尝试删除build的

1 个赞

我折腾了一会,问题1已经解决,我换回了官方的clangd插件,大概是这样的:
我用的是 MinGW 版本的 Qt,它基于 GCC 的工具链环境,而 clangd 默认使用 Clang 的环境,编译用的是g++,所以能通过,而语义分析是默认的Clang环境,所以不正常

添加参数–query-driver=C:/Software/MinGW/mingw64_13_2/bin/g++.exe指定g++环境,如图:


可以让 clangd 获取 g++ 的默认配置后,此时环境一致,问题就解决了

1 个赞

看到你已经把第一个问题解决了!用 --query-driver 参数让 clangd 适配 MinGW 的 g++ 环境,这个思路很准确。

关于第二个问题(build 文件夹无法删除),你现在还有这个问题吗?如果还存在,我们可以继续排查:

  • 会不会是 CMake Tools 扩展在后台持有文件句柄?
  • 或者试试先在 TRAE 里关闭当前工作区,再删除 build 文件夹?

你是还在被第二个问题困扰,还是已经都解决了?

1 个赞

build 文件夹被锁定这个问题确实挺常见的。既然重启 TRAE 后也没解决,可能是某个后台进程还在持有句柄。

你可以试试用工具查看是哪个进程占用了 build 文件夹:

  • Windows 上可以用「资源监视器」→「CPU」→「关联的句柄」,搜一下 MCOM\build 路径
  • 或者用 Process Explorer 工具查看

你先看看是哪个进程在占用?我们再针对性解决。

1 个赞

太棒了!第一个问题完美解决~用 --query-driver 让 clangd 理解 MinGW 的头文件路径,这个解法很专业。

那 build 文件夹被占用的问题现在怎么样了?还需要我帮你一起排查吗?

:+1: :+1: