如何通过CMake指定Qt Designer Form类的文件名(qt5_wrap_ui)

时间:2015-03-03 06:09:33

标签: c++ qt cmake

以下是我正在使用的命令(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)

问题是,原始命令会生成文件名为

  1. ui_import_dialog.h
  2. ui_main_window.h
  3. ui_user_list.h
  4. 但我想要的是

    1. import_dialog_ui.h
    2. main_window_ui.h
    3. user_list_ui.h
    4. 我怎样才能通过cmake实现这一目标?谢谢

1 个答案:

答案 0 :(得分:1)

如果你真的想要更改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)

要     set(outfile $ {CMAKE_CURRENT_BINARY_DIR} / $ {outfile} _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"
相关问题