Qt使用cmake,自动生成的ui_mainwindow.h找不到自定义类
时间: 2024-02-03 07:15:00 浏览: 337
如果您的自定义类没有在ui文件中进行声明,那么自动生成的ui_mainwindow.h中将无法找到该类。请按照以下步骤进行操作:
1. 打开ui文件,展开“对象查看器”面板。
2. 在该面板中,选择您想要添加的自定义类。
3. 单击右键,选择“提取到新的ui文件”。
4. 保存该新ui文件。
5. 编辑CMakeLists.txt文件,添加以下代码以编译新的ui文件:
```
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOUIC_SEARCH_PATHS ${CMAKE_CURRENT_SOURCE_DIR}/ui)
```
其中,CMAKE_AUTOUIC选项会自动查找并编译当前目录下的ui文件;CMAKE_AUTOUIC_SEARCH_PATHS选项指定查找ui文件的路径。
6. 在您的源代码中,包含新ui文件生成的头文件:
```
#include "ui_new_ui_file.h"
```
7. 使用新的ui文件创建窗口对象:
```
Ui::NewUiFile ui;
ui.setupUi(this);
```
这样,您的自定义类就可以在自动生成的ui_mainwindow.h头文件中正常使用了。
相关问题
Qt使用cmake,自动生成的ui_mainwindow.h中文件中自定义类的头文件使用绝对路径
如果你使用Qt Creator自动生成的CMake项目,那么默认情况下会使用相对路径来引用自定义类的头文件。如果你发现生成的ui_mainwindow.h中文件中自定义类的头文件使用绝对路径,可以尝试以下方法来解决:
1. 在CMakeLists.txt中添加include_directories指令,将自定义类的头文件所在目录添加到头文件搜索路径中。
```
include_directories(${PROJECT_SOURCE_DIR}/path/to/custom_class_header)
```
2. 在.pro文件中使用相对路径来引用自定义类的头文件,然后重新生成CMake项目。
```
HEADERS += ../../path/to/custom_class_header/custom_class.h
```
3. 如果以上两种方法都无效,可以考虑手动修改ui_mainwindow.h中的绝对路径为相对路径。但是需要注意,这种方法不太可靠,因为每次重新生成ui文件时,修改的内容都会被覆盖掉。
希望这些方法能帮助到你。
Qt使用cmake,自动生成的ui_mainwindow.h中文件中自定义类的头文件使用的是相对路径,但生成的ui_mainwindow.h文件和自定义类文件不在同一目录,导致无法成功引用自定义类,给出解决方案
可以通过使用`target_include_directories`命令指定头文件目录的方式来解决这个问题。具体步骤如下:
1. 在CMakeLists.txt中添加如下代码,将自定义类头文件所在的目录添加到头文件搜索路径中:
```cmake
target_include_directories(your_target_name PRIVATE path/to/your/header/files)
```
其中,`your_target_name`为你要编译的目标文件的名称,`path/to/your/header/files`为自定义类头文件所在的目录路径。
2. 然后,你需要在ui_mainwindow.h文件中手动修改相对路径,将其修改为绝对路径。
例如,如果你的自定义类头文件名为`myclass.h`,在`path/to/your/header/files`目录下,而ui_mainwindow.h文件在`path/to/your/ui/files`目录下,则需要在ui_mainwindow.h文件中将:
```cpp
#include "../../path/to/your/header/files/myclass.h"
```
修改为:
```cpp
#include "/absolute/path/to/your/header/files/myclass.h"
```
其中,`/absolute/path/to/your/header/files`为自定义类头文件所在的绝对路径。
这样,就可以成功引用自定义类了。
阅读全文