关于QT cmake项目添加了.ui文件build未自动生成ui_xxx.h,错误提示找不到这个头文件问题处理

server/2024/10/24 4:39:09/

文章目录

      • 问题
      • 分析
      • 举例

问题

  • 当我们想使用cmakelist来编译运行一个QT项目时,当项目中存在Ui文件时,我们可能会遇到ui_XXX.h头文件找不到的问题。这里我们来分析并解决一下问题。

分析

  • 不管是在cmake下或者qmake下的ui_XXX.h都是根据XXX.ui文件自动生成的。
  • 在cmake下,一般来说是使用set(CMAKE_AUTOUIC ON)
    这个设置启用了 CMake 的自动处理机制,用于处理 Qt 的 .ui 文件。当设置为 ON 时,CMake 会自动调用 Qt 的 uic 工具,将 .ui 文件编译成相应的头文件(.h 文件)。这些头文件随后可以被包含在项目中,以便在代码中使用由 Qt Designer 设计的界面。
    例如,如果你有一个名为 mainwindow.ui 的界面文件,启用 CMAKE_AUTOUIC 后,CMake 会自动生成一个 ui_mainwindow.h 文件,你可以直接在你的代码中包含这个头文件。
  • 还有一个qt5_wrap_ui,作用相似,将它们转换成 C++ 头文件。CMAKE_AUTOUIC 是一个高级选项,它告诉 CMake 自动为所有目标(如可执行文件或库)中的 .ui 文件生成相应的头文件。这意味着你不需要显式地为每个 .ui 文件调用qt5_wrap_ui宏。这在项目中有大量 .ui 文件时非常方便,因为它可以减少重复的配置代码。然而,有时候你可能需要更细粒度的控制,或者 CMAKE_AUTOUIC 无法正确处理某些 .ui 文件。在这种情况下,你可以禁用 CMAKE_AUTOUIC 并显式地使用 qt5_wrap_ui
  • CMAKE_AUTOUIC 出现问题(版本不兼容)时,通过手动使用 qt5_wrap_ui 可以帮助你更好地解决问题所在
  • 使用 qt5_wrap_ui 宏时还有一个重要的设置set(CMAKE_INCLUDE_CURRENT_DIR ON)
    这个设置告诉 CMake 在编译过程中自动将当前源文件所在的目录(也就是源代码文件所在的目录)添加到头文件的搜索路径中。这对于确保编译器可以找到所有相关的头文件非常重要,特别是那些在源文件中直接包含的头文件。例如,如果你的源代码文件 main.cpp 包含了一个位于同一目录下的头文件 mainwindow.h,那么 CMAKE_INCLUDE_CURRENT_DIR ON 会确保编译器在寻找 mainwindow.h 时,会查看 main.cpp 所在的目录,这对我们找到ui_XXX.h头文件很关键

举例

cmake_minimum_required(VERSION 3.0.0)project(HMI)set(CMAKE_CXX_STANDARD 11)set(CMAKE_CXX_STANDARD_REQUIRED ON)set(CMAKE_AUTOMOC ON)set(CMAKE_AUTORCC ON)
#不能同时与其使用
# set(CMAKE_AUTOUIC ON)
#找头文件
set(CMAKE_INCLUDE_CURRENT_DIR ON)file(GLOB header_s 
${CMAKE_CURRENT_LIST_DIR}/*.h
${CMAKE_CURRENT_LIST_DIR}/wizard/page/*.h
)file(GLOB soucer_s 
${CMAKE_CURRENT_LIST_DIR}/*.cpp
${CMAKE_CURRENT_LIST_DIR}/wizard/page/*.cpp
)file(GLOB ui_s 
${CMAKE_CURRENT_LIST_DIR}/wizard/ui/*.ui
)
#转换为.h文件
find_package(Qt5 REQUIRED Widgets Gui Core)qt5_wrap_ui(QT_FORMS_HPP ${ui_s})add_executable(HMI ${header_s} ${soucer_s}${QT_FORMS_HPP}
)target_include_directories(HMI PRIVATE${CMAKE_CURRENT_LIST_DIR}${CMAKE_CURRENT_LIST_DIR}/wizard/page
)target_link_libraries(HMI PUBLICQt5::Widgets Qt5::Gui Qt5::Core 
)
  • 当我们add_executable中不加入 ${QT_FORMS_HPP}代码也是可以编译过的,不过你修改后的Ui文件是不会生效的

http://www.ppmy.cn/server/134349.html

相关文章

MATLAB imnoise函数

**MATLAB imnoise函数用于向图像添加不同类型的噪声,以模拟真实世界中的噪声污染情况**。以下是该函数的具体说明: 1. **基本语法和参数**:imnoise函数的基本使用格式为g imnoise(I, type),其中g是添加噪声之后的图像&#xff0c…

JMeter使用不同方式传递接口参数

1、使用 HTTP 请求中的参数: 在 JMeter 的测试计划中,添加一个 "HTTP 请求" 元件。 在 "HTTP 请求" 元件的参数化选项中,可以添加参数的名称和值。可以手动输入参数,也可以使用变量来传递参数值。 如果要使…

使用 npm 安装pnpm

pnpm 安装https://www.pnpm.cn/installation 使用 npm 安装​ 我们提供了两个 pnpm CLI 包, pnpm 和 pnpm/exe。 pnpm is an ordinary version of pnpm, which needs Node.js to run.pnpm/exe 与 Node.js 一起打包成可执行文件,因此它可以在没有安装 …

Liunx 操作redis

1,到Liunx的redis的安装目录下/home/redis/redis-7.2.3/src 执行命令 ./redis-cli2,执行命令后,出现以下 127.0.0.1:6379>3,输入密码 127.0.0.1:6379> AUTH 你的密码4,切换db库 127.0.0.1:6379> SELECT 55,操作命令 查看当前 db库的缓存 127.0.0.1:63…

(接上篇问题回答)OWASP Top 10 漏洞详解:基础知识、面试常问问题与实际应用

1. SQL注入 面试常见问题 什么是SQL注入? SQL注入是一种网络安全漏洞,攻击者通过向SQL查询插入恶意代码,来干扰应用程序的数据库查询,导致未授权的数据访问或数据操纵。 如何防止SQL注入? 防止SQL注入的方法包括&am…

智能去毛刺:2D视觉引导机器人如何重塑制造业未来

机器人技术已经深入到各个工业领域中,为制造业带来了前所未有的变革。其中,2D视觉引导机器人技术以其精准、高效的特点,在去毛刺工艺中发挥着越来越重要的作用。本文将为您介绍2D视觉引导机器人技术的基本原理及其在去毛刺工艺中的应用&#…

文件与 IO

一、文件 在计算机系统中,文件是一种基本的数据管理单位,它是存储在计算机存储介质上的信息集合,包括但不限于文本、图片等形式。 文件除了数据内容以外,还有一部分信息,如文件名、文件类型、文件大小等文件的元信息。…

整理—Redis

目录 Redis底层的数据结构 ZSet用过吗 Zset 底层是怎么实现的 跳表是怎么实现的? Redis为什么使用跳表而不是用B树? 压缩列表是怎么实现的? Redis 中的 listpack 哈希表是怎么扩容的? String 是使用什么存储的 Redis为什么快&#xf…