我如何通过 CMake(qt5_wrap_ui) 指定 Qt Designer Form class 的文件名
How could I specify the file name of the Qt Designer Form class by CMake(qt5_wrap_ui)
以下是我正在使用的命令(automoc 不适用于 mu),效果很好
qt5_wrap_ui(import_dialog_ui ${HW_DATA_DIR}/import_dialog.ui)
qt5_wrap_ui(main_win_ui ${HW_DATA_DIR}/main_window.ui)
qt5_wrap_ui(user_list_ui ${HW_DATA_DIR}/user_list.ui)
项目布局
Project
--incl
--src
--data(The path of HW_DATA_DIR)
问题是,原来的命令会生成文件名
- ui_import_dialog.h
- ui_main_window.h
- ui_user_list.h
但我想要的是
- import_dialog_ui.h
- main_window_ui.h
- user_list_ui.h
我如何通过 cmake 实现此目的?谢谢
好吧,如果你真的想更改 qt5_wrap_ui
函数的输出文件的名称,你可以制作一个自定义版本,它实际上是现有版本的副本。它位于 lib/cmake/Qt5Widgets/Qt5WidgetsMacros.cmake
下的 Qt 安装中,如下所示:
include(CMakeParseArguments)
# qt5_wrap_ui(outfiles inputfile ... )
function(QT5_WRAP_UI outfiles )
set(options)
set(oneValueArgs)
set(multiValueArgs OPTIONS)
cmake_parse_arguments(_WRAP_UI "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
set(ui_files ${_WRAP_UI_UNPARSED_ARGUMENTS})
set(ui_options ${_WRAP_UI_OPTIONS})
foreach(it ${ui_files})
get_filename_component(outfile ${it} NAME_WE)
get_filename_component(infile ${it} ABSOLUTE)
set(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h)
add_custom_command(OUTPUT ${outfile}
COMMAND ${Qt5Widgets_UIC_EXECUTABLE}
ARGS ${ui_options} -o ${outfile} ${infile}
MAIN_DEPENDENCY ${infile} VERBATIM)
list(APPEND ${outfiles} ${outfile})
endforeach()
set(${outfiles} ${${outfiles}} PARENT_SCOPE)
endfunction()
为此,从 Qt5WidgetsMacros.cmake
文件中获取代码并将其存储在另一个文件中,例如Qt5Customizations.cmake
。您所要做的就是将函数名称重命名为突出您的自定义的名称:
function(QT5_WRAP_UI outfiles )
将其更改为例如:
function(QT5_WRAP_UI_CUSTOM outfiles )
并且您必须更改行,其中输出 ui 文件存储自:
set(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h)
到
设置(输出文件 ${CMAKE_CURRENT_BINARY_DIR}/${输出文件}_ui.h)
如果您现在将自定义 CMake 脚本包含在项目的 CMake 脚本中:
include( Qt5Customizations )
您现在可以使用自定义函数:
qt5_wrap_ui_custom(import_dialog_ui ${HW_DATA_DIR}/import_dialog.ui)
并将生成的 ui 文件包含在
中
#include "import_dialog_ui.h"
以下是我正在使用的命令(automoc 不适用于 mu),效果很好
qt5_wrap_ui(import_dialog_ui ${HW_DATA_DIR}/import_dialog.ui)
qt5_wrap_ui(main_win_ui ${HW_DATA_DIR}/main_window.ui)
qt5_wrap_ui(user_list_ui ${HW_DATA_DIR}/user_list.ui)
项目布局
Project
--incl
--src
--data(The path of HW_DATA_DIR)
问题是,原来的命令会生成文件名
- ui_import_dialog.h
- ui_main_window.h
- ui_user_list.h
但我想要的是
- import_dialog_ui.h
- main_window_ui.h
- user_list_ui.h
我如何通过 cmake 实现此目的?谢谢
好吧,如果你真的想更改 qt5_wrap_ui
函数的输出文件的名称,你可以制作一个自定义版本,它实际上是现有版本的副本。它位于 lib/cmake/Qt5Widgets/Qt5WidgetsMacros.cmake
下的 Qt 安装中,如下所示:
include(CMakeParseArguments)
# qt5_wrap_ui(outfiles inputfile ... )
function(QT5_WRAP_UI outfiles )
set(options)
set(oneValueArgs)
set(multiValueArgs OPTIONS)
cmake_parse_arguments(_WRAP_UI "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
set(ui_files ${_WRAP_UI_UNPARSED_ARGUMENTS})
set(ui_options ${_WRAP_UI_OPTIONS})
foreach(it ${ui_files})
get_filename_component(outfile ${it} NAME_WE)
get_filename_component(infile ${it} ABSOLUTE)
set(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h)
add_custom_command(OUTPUT ${outfile}
COMMAND ${Qt5Widgets_UIC_EXECUTABLE}
ARGS ${ui_options} -o ${outfile} ${infile}
MAIN_DEPENDENCY ${infile} VERBATIM)
list(APPEND ${outfiles} ${outfile})
endforeach()
set(${outfiles} ${${outfiles}} PARENT_SCOPE)
endfunction()
为此,从 Qt5WidgetsMacros.cmake
文件中获取代码并将其存储在另一个文件中,例如Qt5Customizations.cmake
。您所要做的就是将函数名称重命名为突出您的自定义的名称:
function(QT5_WRAP_UI outfiles )
将其更改为例如:
function(QT5_WRAP_UI_CUSTOM outfiles )
并且您必须更改行,其中输出 ui 文件存储自:
set(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h)
到 设置(输出文件 ${CMAKE_CURRENT_BINARY_DIR}/${输出文件}_ui.h)
如果您现在将自定义 CMake 脚本包含在项目的 CMake 脚本中:
include( Qt5Customizations )
您现在可以使用自定义函数:
qt5_wrap_ui_custom(import_dialog_ui ${HW_DATA_DIR}/import_dialog.ui)
并将生成的 ui 文件包含在
中#include "import_dialog_ui.h"