QT:.ui 文件中的标头

Alg*_*rys 5 qt cmake

我想知道如何使<header>在files.ui与cmake的定制部件作品。

我有这样的 CMakeLists :

cmake_minimum_required(VERSION 3.0.0 FATAL_ERROR)

project(qtelec C CXX)

set(CMAKE_PREFIX_PATH $ENV{HOME}/Qt5.6.0/5.6/gcc_64)
set(SRC_BASE_DIR "../../../qtelec")
set(COREALPI_BUILD_DIR "../../../../corealpi/build")

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

find_package(Qt5Widgets REQUIRED)

file(GLOB_RECURSE SRC_FILES 
    ${SRC_BASE_DIR}/src/*.h 
    ${SRC_BASE_DIR}/src/*.cpp
)

link_directories(${COREALPI_BUILD_DIR}/elec)
link_directories(${COREALPI_BUILD_DIR}/elec/core)

add_library(qtelec SHARED
    ${SRC_FILES}
)

add_subdirectory(${SRC_BASE_DIR}/../platform/cmake/qtutils ${CMAKE_BINARY_DIR}/qtutils)  
include_directories(${SRC_BASE_DIR}/../external/qtpropertybrowser/latest/src)
include_directories(${SRC_BASE_DIR}/../qtutils/src)
#include_directories(${SRC_BASE_DIR}/src/widgets)
include_directories(${COREALPI_BUILD_DIR}/../include/ca)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

target_link_libraries(qtelec qtpropertybrowser elec core qtutils Qt5::Widgets)
Run Code Online (Sandbox Code Playgroud)

cmake ..有效,但cmake --build .给我以下错误:

[ 65%] Building CXX object CMakeFiles/qtelec.dir/home/mea/workspace/repos/qtelec/qtelec/src/forms/conversionform.cpp.o
In file included from /home/mea/workspace/repos/qtelec/qtelec/src/forms/conversionform.cpp:2:0:
/home/mea/workspace/repos/qtelec/build/ui_conversionform.h:18:40: fatal error: ../widgets/canecoboxwidget.h: Aucun fichier ou dossier de ce type
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

如果我看在我conversionform.ui我有类似的东西(和其他files.ui太):

<customwidgets>
  <customwidget>
   <class>CanecoBoxWidget</class>
   <extends>QWidget</extends>
   <header>../widgets/canecoboxwidget.h</header>
   <container>1</container>
  </customwidget>
</customwidgets>
Run Code Online (Sandbox Code Playgroud)

但问题是我的ui_generated文件在我的构建文件夹中,所以当 cmake 尝试找到../widgets/他不存在的路径时。这是我的文件夹结构:

??? build
??? qtelec
?   ??? src
?        ??? *.h
?        ??? *.cpp
?        ??? editors
?              ??? *.h
?              ??? *.cpp
?              ??? *.ui
?        ??? forms
?              ??? *.h
?              ??? *.cpp
?              ??? *.ui
?        ??? widgets
?              ??? *.h
?              ??? *.cpp
?              ??? *.ui
??? cmake/CMakelists.txt
Run Code Online (Sandbox Code Playgroud)

我找到的唯一解决方案是将目录包含在include_directories(${SRC_BASE_DIR}/src/widgets).

但我认为在 CMake 或 QT 中还有其他方法可以使其在没有额外包含的情况下工作?

在 .pro 文件中,不需要包含此文件夹。

你能帮我找到解决办法吗?

如果你想要更多的信息,我可以给。

感谢帮助。

arr*_*owd 1

从 .ui 文件生成的文件放置在 ${CMAKE_BINARY_DIR} 中,而不是 ${CMAKE_SOURCE_DIR} 中。在你的情况下是的/home/mea/workspace/repos/qtelec/build/。正如你所看到的,没有/home/mea/workspace/repos/qtelec/build/../widgets/canecoboxwidget.h.

我猜,正确的解决方案是使用qt_wrap_ui命令。