gpt4 book ai didi

c++ - CMake Qt5无法为ui文件AUTOUIC生成头文件

转载 作者:搜寻专家 更新时间:2023-10-31 02:10:36 60 4
gpt4 key购买 nike

我无法使用 cmake 3.5.2 和 Qt 5.9 为我的 ui 文件生成 header 。

我的 CMakeFileLists.txt:

cmake_minimum_required(VERSION 3.5)
project( fc_app )
message( STATUS "Configuring project")


set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)

message( STATUS "search OpenCV")
find_package(
OpenCV
3.2.0
REQUIRED
)

message( STATUS "search Qt")
find_package(
Qt5
5.5.1
REQUIRED
Core
Gui
Widgets
Multimedia
)

message( STATUS "search Boost")
find_package(
Boost
1.58.0
REQUIRED
)


file( GLOB_RECURSE source_files src/* )
file( GLOB_RECURSE header_files include/* )
file( GLOB_RECURSE ui_files ui/* )
file( GLOB_RECURSE res_files res/* )

add_executable(
fc_app
${source_files}
${header_files}
${ui_files}
)

target_link_libraries(
fc_app
${OpenCV_LIBS}
Qt5::Widgets
Qt5::Multimedia
${Boost_LIBRARIES}
)

当我在 root/build/目录中运行 cmake .. & make 时,出现以下错误(在 make 中)。 ui 文件是一个简单的 QMainWindow,里面有 2 个按钮,所以我不明白为什么 ui_mainwindow.h 的生成失败了。我也尝试用其他版本的 Qt5 Designer 重新制作 ui 文件。

File '/blablablabla/mainwindow.ui' is not valid
AUTOUIC: error: process for ui_mainwindow.h needed by
"/blablablabla/mainwindow.cpp"
failed:
File '/blablablabla/mainwindow.ui' is not valid

最佳答案

AUTOUIC 的 CMake 和 QT 有一个怪癖。是claimed CMake 将自动扫描文件以查找 ui 文件包含,但如果 ui 包含位于源文件的第一行 则它​​不起作用。

所以下面的设置:

CMakeLists.txt:

project("proj")

set(CMAKE_PREFIX_PATH "$ENV{QTDIR}")
find_package(Qt5Core REQUIRED)
find_package(Qt5Widgets REQUIRED)

set(CMAKE_INCLUDE_CURRENT_DIR "YES")
set(CMAKE_AUTOMOC "YES")
set(CMAKE_AUTOUIC "YES")

add_executable("proj" MACOSX_BUNDLE main.cpp)
target_link_libraries("proj" Qt5::Core Qt5::Widgets)

form.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Form</class>
<widget class="QWidget" name="Form">
</widget>
<resources/>
<connections/>
</ui>

将无法通过 main.cpp 进行编译:

1. #include "ui_form.h"
2.
3. int main() {
4. }
$ cmake --build .
Scanning dependencies of target proj_automoc
[ 25%] Automatic moc and uic for target proj
Generating moc compilation proj_automoc.cpp
[ 25%] Built target proj_automoc
Scanning dependencies of target proj
[ 50%] Building CXX object CMakeFiles/proj.dir/main.cpp.o
main.cpp:1:10: fatal error: 'ui_form.h' file not found
#include "ui_form.h"
^
1 error generated.
make[2]: *** [CMakeFiles/proj.dir/main.cpp.o] Error 1
make[1]: *** [CMakeFiles/proj.dir/all] Error 2
make: *** [all] Error 2

但是,如果您的 ui include 不在第一行:

1. 
2. #include "ui_form.h"
3. int main() {
4. }
$ cmake --build .
[ 25%] Automatic moc and uic for target proj
Generating ui header ui_form.h
[ 25%] Built target proj_automoc
Scanning dependencies of target proj
[ 50%] Building CXX object CMakeFiles/proj.dir/main.cpp.o
[ 75%] Building CXX object CMakeFiles/proj.dir/proj_automoc.cpp.o
[100%] Linking CXX executable proj.app/Contents/MacOS/proj
[100%] Built target proj

更新。 This regular expression用于扫描包含的是罪魁祸首:

this->UicRegExpInclude.compile("[\n][ \t]*#[ \t]*include[ \t]+"
"[\"<](([^ \">]+/)?ui_[^ \">/]+\\.h)[\">]");

它在最新版本 3.10.2 中仍然存在,但已在 3.11 中修复:

Uic_.RegExpInclude.compile("(^|\n)[ \t]*#[ \t]*include[ \t]+"
"[\"<](([^ \">]+/)?ui_[^ \">/]+\\.h)[\">]");

关于c++ - CMake Qt5无法为ui文件AUTOUIC生成头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44967065/

60 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com