You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt项目CMake配置报错:forms目录下.ui文件无法被识别

解决Qt CMake项目中UI文件路径识别问题

问题根源

你启用了CMAKE_AUTOUIC,这个机制会自动扫描源文件里的#include "ui_*.h"语句,然后去源文件所在的目录找对应的.ui文件。你的mainwindow.cpp在src目录,但mainwindow.ui放在forms目录里,AUTOUIC自然找不到。另外你手动调用qt6_wrap_ui的操作和AUTOUIC的自动处理逻辑冲突,进一步导致路径识别混乱。

两种解决方案

方案1:配置AUTOUIC的搜索路径(推荐)

保留CMAKE_AUTOUIC的便捷性,只需要告诉它去forms目录找UI文件即可:

  1. 在CMakeLists.txt里,创建目标之后添加以下配置:
# 让项目能找到include目录下的头文件
target_include_directories(MyProject PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
# 指定AUTOUIC去forms目录搜索UI文件
set_target_properties(MyProject PROPERTIES
    AUTOUIC_SEARCH_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/forms
)
  1. 删除你手动写的qt6_wrap_ui代码块——AUTOUIC会自动处理UI文件,不需要手动包裹。

方案2:禁用AUTOUIC,手动处理UI文件

如果非要保留手动调用qt6_wrap_ui的写法,需要禁用AUTOUIC,并确保生成的UI头文件能被源文件找到:

  1. 注释或删除set(CMAKE_AUTOUIC ON)这一行;
  2. 给目标添加临时生成目录的包含路径,让源文件能找到ui_mainwindow.h:
qt6_wrap_ui(UI_FILES
    ${CMAKE_CURRENT_SOURCE_DIR}/forms/mainwindow.ui
)
# 让项目包含UI头文件的生成目录
target_include_directories(MyProject PRIVATE ${CMAKE_CURRENT_BINARY_DIR})

优化后的完整CMakeLists.txt(方案1版本)

cmake_minimum_required(VERSION 3.5)

project(MyProject VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)  # 保留自动UI处理

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)

set(PROJECT_SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/mainwindow.cpp
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(MyProject
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )
else()
    if(ANDROID)
        add_library(MyProject SHARED
            ${PROJECT_SOURCES}
        )
    else()
        add_executable(MyProject
            ${PROJECT_SOURCES}
        )
    endif()
endif()

# 配置头文件包含路径和UI文件搜索路径
target_include_directories(MyProject PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
set_target_properties(MyProject PROPERTIES
    AUTOUIC_SEARCH_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/forms
)

target_link_libraries(MyProject PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

if(${QT_VERSION} VERSION_LESS 6.1.0)
  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.MyProject)
endif()
set_target_properties(MyProject PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

include(GNUInstallDirs)
install(TARGETS MyProject
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(MyProject)
endif()

内容的提问来源于stack exchange,提问作者Thomas A Mathew

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 00:43:14