根本原因不是路径错误,而是uic未执行导致ui_mainwindow.h未生成;需确认uic是否被调用、生成路径是否正确、旧文件是否残留,并区分IntelliSense误报与真实编译失败。

VS里编译报C1083:找不到ui_mainwindow.h,先看uic有没有跑
这个报错根本不是路径问题,而是mainwindow.ui → “属性” → “常规” → “项类型”,改成Custom Build Tool;再进“配置属性” → “常规” → “命令行”,填:"$(QTDIR)\bin\uic.exe" -o "./GeneratedFiles/ui_mainwindow.h" "$(FullPath)"
,“输出”填:./GeneratedFiles/ui_mainwindow.h。不设这一步,.ui就是个纯文本,永远生不成ui_mainwindow.h。
CMake项目中ui_*.h不生成,检查CMAKE_AUTOUIC是否生效
CMAKE_AUTOUIC必须在project()之后、add_executable()之前启用,顺序错就无效。Qt6推荐用qt_standard_project_setup(),但它有硬性前置条件:find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)得先成功,且必须放在它之后、目标定义之前。一旦启用,CMake会自动扫描所有源文件里的#include "ui_*.h",然后去同目录找对应*.ui——你不用把mainwindow.ui加进add_executable()的源文件列表里。
手动生成ui_*.h救急,但别长期依赖
临时验证或调试时,可以手动跑uic:
uic mainwindow.ui > ui_mainwindow.h。前提是
uic.exe在PATH里,或者直接用绝对路径调用,比如:F:\Qt\6.5.3\msvc2019_64\bin\uic.exe mainwindow.ui -o ui_mainwindow.h。注意两点:生成的
ui_mainwindow.h要和#include语句里的名字完全一致(大小写敏感);生成后得把旧的、可能残留的同名文件删干净,否则CMake或qmake可能跳过重生成。
Qt Creator里红波浪线但能编译过,别瞎改包含目录
IntelliSense标红ui_mainwindow.h ≠ 编译失败。按Ctrl+Shift+B实际构建一次,如果成功,说明只是索引缓存没更新。这时候重启Qt Creator或执行“项目” → “重新扫描项目文件”就行。很多人一看到红波浪线就往INCLUDEPATH里狂加GeneratedFiles路径,反而干扰了正确路径解析——因为ui_*.h默认生成在构建目录下(如build-xxx\GeneratedFiles),而IDE的索引器不一定实时同步这个动态路径。
uic压根没触发,或者CMAKE_AUTOUIC启用时机不对。这两个点漏掉一个,后面所有include路径、清理重建、重启IDE的操作都是白忙。


















