Qt5 模块

Qt5 模块提供工具来自动处理 Qt 所需的各种工具和步骤。

compile_resources

0.59.0 中新增

将 Qt 的资源集合文件 (.qrc) 编译成 c++ 文件以进行编译。

它不接受位置参数,并接受以下关键字参数

  • name (字符串 | 空):如果提供单个 .cpp 文件,则会生成一个 .cpp 文件,并将所有 qrc 文件的输出合并到此文件中,否则每个 qrc 文件都将写入到它自己的 cpp 文件中。
  • sources (文件 | 字符串 | 自定义目标 | 自定义目标索引 | 生成器输出)[]: 要转换的源文件列表。必需,必须至少有一个源文件 * 0.60.0 中新增 *:支持自定义目标、自定义目标索引和生成器输出。
  • extra_args 字符串[]: 要直接传递给 qt-rcc 的额外参数
  • method 字符串: 用于检测 Qt 的方法,有关更多信息,请参见 dependency()

compile_ui

0.59.0 中新增

将 Qt 的 ui 文件 (.ui) 编译成头文件。

它不接受位置参数,并接受以下关键字参数

  • sources (文件 | 字符串 | 自定义目标 | 自定义目标索引 | 生成器输出)[]: 要转换的源文件列表。必需,必须至少有一个源文件 * 0.60.0 中新增 *:支持自定义目标、自定义目标索引和生成器输出。
  • extra_args 字符串[]: 要直接传递给 qt-uic 的额外参数
  • method 字符串: 用于检测 Qt 的方法,有关更多信息,请参见 dependency()
  • preserve_paths 布尔值: * 从 1.4.0 开始 *。如果为 true,则指定输出文件需要在目标临时目录中保持其目录结构。例如,当处理名为 subdir/one.input 的文件时,如果为 true,它将生成一个名为 {target private directory}/subdir/one.out 的文件,如果为 false(默认),则生成一个名为 {target private directory}/one.out 的文件。

compile_moc

0.59.0 中新增

将 Qt 的 moc 文件 (.moc) 编译成头文件和/或源文件。必须提供关键字参数 headerssources 中的至少一个。

它不接受位置参数,并接受以下关键字参数

  • sources (文件 | 字符串 | 自定义目标 | 自定义目标索引 | 生成器输出)[]: 要转换的源文件列表,以生成 .moc 文件以供手动包含。* 0.60.0 中新增 *:支持自定义目标、自定义目标索引和生成器输出。
  • headers (文件 | 字符串 | 自定义目标 | 自定义目标索引 | 生成器输出)[]: 要转换的源文件列表,以生成 .cpp 文件 * 0.60.0 中新增 *:支持自定义目标、自定义目标索引和生成器输出。
  • extra_args 字符串[]: 要直接传递给 qt-moc 的额外参数
  • method 字符串: 用于检测 Qt 的方法,有关更多信息,请参见 dependency()
  • dependencies: 包含目录被 moc 使用的依赖项对象。
  • include_directories (字符串 | IncludeDirectory)[]: 在转换 .moc 文件时使用的 include_directory() 对象列表
  • preserve_paths 布尔值: * 1.4.0 中新增 *。如果为 true,则指定输出文件需要在目标临时目录中保持其目录结构。例如,当处理名为 subdir/one.input 的文件时,如果为 true,它将生成一个名为 {target private directory}/subdir/one.out 的文件,如果为 false(默认),则生成一个名为 {target private directory}/one.out 的文件。

preprocess

建议使用 compile_resourcescompile_uicompile_moc 代替。

获取 moc、uic 和 rcc 的源文件,并将它们转换为 c++ 文件以进行编译。

具有以下签名:qt.preprocess(name: str | None, *sources: str)

如果传递了 name 参数,则所有 rcc 文件都将写入单个输出文件

可变参数 sources 自 Meson 0.59.0 起已弃用,sources 关键字参数也是如此。这些文件将未经修改地通过预处理器传递,请不要这样做,只需将生成器的输出添加到另一个源文件列表中

sources = files('a.cpp', 'main.cpp', 'bar.c')
sources += qt.preprocess(qresources : ['resources'])

此方法接受以下关键字参数

  • qresources (字符串 | 文件)[]: 传递给 RCC 编译器
  • ui_files: (字符串 | 文件 | 自定义目标)[]: 传递给 uic 编译器
  • moc_sources: (字符串 | 文件 | 自定义目标)[]: 传递给 moc 编译器。这些将被转换为旨在 #include 的 .moc 文件
  • moc_headers: (字符串 | 文件 | 自定义目标)[]: 传递给 moc 编译器。这些将被转换为 .cpp 文件
  • include_directories (IncludeDirectories | 字符串)[], 要添加到 moc 的头文件搜索路径中的目录
  • moc_extra_arguments 字符串[]: moc 的任何其他参数。从 v0.44.0 开始。
  • uic_extra_arguments 字符串[]: uic 的任何其他参数。从 v0.49.0 开始。
  • rcc_extra_arguments 字符串[]: rcc 的任何其他参数。从 v0.49.0 开始。
  • dependencies Dependency[]: moc 所需的依赖项对象。从 v0.48.0 开始可用。
  • sources: 额外源文件列表,这些源文件将被添加到输出中而不会更改。在 0.59.0 中已弃用。
  • preserve_paths 布尔值: * 1.4.0 中新增 *。如果为 true,则指定输出文件需要在目标临时目录中保持其目录结构。例如,当处理名为 subdir/one.input 的文件时,如果为 true,它将生成一个名为 {target private directory}/subdir/one.out 的文件,如果为 false(默认),则生成一个名为 {target private directory}/one.out 的文件。

它返回一个目标和源文件数组,以传递给编译目标。

compile_translations

从 0.44.0 开始

此方法生成必要的目标以使用 lrelease 构建翻译文件,它不接受位置参数,并接受以下关键字参数

  • ts_files (文件 | 字符串 | 自定义目标 | 自定义目标索引 | 生成器输出)[]: 由 Qt 的 lupdate 工具生成的输入翻译文件列表。* 0.60.0 中新增 *:支持自定义目标、自定义目标索引和生成器输出。
  • install 布尔值: 当为 true 时,此目标将在安装步骤中安装(可选)。
  • install_dir 字符串: 要安装到的目录(可选)。
  • build_by_default 布尔值: 当设置为 true 时,将使此目标默认构建,即在调用 meson compile 时;默认值为 false(可选)。
  • qresource 字符串: 要从中提取 ts_files 的 rcc 源文件;不能与 ts_files kwarg 一起使用。从 v0.56.0 开始可用。
  • rcc_extra_arguments 字符串[]: rcc 的任何其他参数(可选),在使用 `qresource 时。从 v0.56.0 开始可用。

返回以下内容之一:已编译翻译的自定义目标列表,或者,如果使用 qresource 文件,则返回包含已处理源文件的单个自定义目标,该目标应传递给主构建目标。

has_tools

从 0.54.0 开始

此方法返回 true,如果找到此模块使用的所有工具,否则返回 false

它应该用于编译可选的 Qt 代码

qt5 = import('qt5')
if qt5.has_tools(required: get_option('qt_feature'))
  moc_files = qt5.preprocess(...)
  ...
endif

此方法接受以下关键字参数

  • required 布尔值 | FeatureOption: 默认情况下,required 设置为 false。如果 required 设置为 true 或启用 feature 并且缺少某些工具,Meson 将中止。
  • method 字符串: 用于查找 Qt 依赖项的方法(默认情况下为 auto)。

依赖项

请参见 Qt 依赖项

modules 参数用于在项目中包含 Qt 模块。有关 模块列表,请参见 Qt 文档。

private_headers 参数允许使用 Qt 模块的私有头文件。(从 v0.47.0 开始)

示例

一个简单的示例如下所示

qt5 = import('qt5')
qt5_dep = dependency('qt5', modules: ['Core', 'Gui'])
inc = include_directories('includes')
moc_files = qt5.compile_moc(headers : 'myclass.h',
                            extra_args: ['-DMAKES_MY_MOC_HEADER_COMPILE'],
                            include_directories: inc,
                            dependencies: qt5_dep)
translations = qt5.compile_translations(ts_files : 'myTranslation_fr.ts', build_by_default : true)
executable('myprog', 'main.cpp', 'myclass.cpp', moc_files,
           include_directories: inc,
           dependencies : qt5_dep)

有时,翻译使用 qresource 文件嵌入到二进制文件中。在这种情况下,不需要显式列出 ts 文件,而是将从 qresource 文件中列出的已构建 qm 文件推断出来。例如

qt5 = import('qt5')
qt5_dep = dependency('qt5', modules: ['Core', 'Gui'])
lang_cpp = qt5.compile_translations(qresource: 'lang.qrc')
executable('myprog', 'main.cpp', lang_cpp,
           dependencies: qt5_dep)

搜索结果为