qt_query_qml_module

检索有关 QML 模块的信息。

此命令在 Qt6 包的 Qml 组件中定义,可以使用如下方式加载:

find_package(Qt6 REQUIRED COMPONENTS Qml)

此命令是在 Qt 6.3 中引入的。

概要

qt_query_qml_module(
    target
    [URI uri_var]
    [VERSION version_var]
    [PLUGIN_TARGET plugin_target_var]
    [TARGET_PATH target_path_var]
    [MODULE_RESOURCE_PATH module_resource_path_var]
    [QMLDIR qmldir_var]
    [TYPEINFO typeinfo_var]
    [QML_FILES qml_files_var]
    [QML_FILES_DEPLOY_PATHS qml_files_deploy_paths_var]
    [QML_FILES_PREFIX_OVERRIDES qml_files_prefix_overrides_var]
    [RESOURCES resources_var]
    [RESOURCES_DEPLOY_PATHS resources_deploy_paths_var]
    [RESOURCES_PREFIX_OVERRIDES resources_prefix_overrides_var]
)

如果禁用了 无版本命令,请使用 qt6_query_qml_module()。它支持与该命令相同的参数集。

描述

此命令用于获取 QML 模块 目标 的信息。该 目标 必须在之前的调用中使用过或其他命令传递创建。该 目标 不能是一个导入的目标。

此命令提供的信息使调用者能够部署单个 QML 模块的所有部分。项目应该使用标准的 install(TARGETS) 命令安装该 目标 和相关联的插件目标(如果有,并且它与支持 目标 的目标分离)。其他内容可以使用 install(FILES) 部署。

参数

每个可选参数指定了存储相应 QML 模块属性的变量的名称。

URIVERSION 分别提供模块的 uri 和版本。

PLUGIN_TARGET 可以用来获取 QML 模块的插件目标名称。并非所有 QML 模块都有插件,因此此选项返回的值可能为空字符串。如果 QML 模块没有分离的支持目标,则 target 将与插件目标相同。

TARGET_PATH 将 uri 中点 (.) 替换为正斜杠 (/)。它表示 QML 模块相应 qmldir 文件(可能还有其他文件)应部署在基本 QML 模块安装目录下的路径。QML 模块安装目录作为 QML 导入路径,其中 QML 引擎将查找 QML 模块。由 qt_generate_deploy_qml_app_script() 使用的默认基本 QML 模块安装目录是 qml。使用部署脚本项目可以使用 QT_DEPLOY_QML_DIR 而不是硬编码此位置(另请参阅 QT_DEPLOY_PREFIX)。

MODULE_RESOURCE_PATH 提供了可以找到 QML 模块编译内文件的资源路径。它由 qt_add_qml_module()RESOURCE_PREFIX 与模块的 TARGET_PATH 连接而成。查询的值不应用于部署,但如果需要,可以有助于将资源路径与文件系统位置匹配。

QMLDIR 提供了 qmldir 文件的路径。在部署 QML 模块时,此文件应复制到目标路径。在部署脚本中,可以使用 ${QT_DEPLOY_PREFIX}/${QT_DEPLOY_QML_DIR} 获取此位置。

TYPEINFO 提供模块类型信息文件的路径,如果有的话。如果没有类型信息文件,则会是空字符串。类型信息文件应与 qmldir 文件部署到相同的路径。

QML_FILES 提供了通过以下方法之一添加到 QML 模块的所有文件的列表

所有文件都会记录为绝对路径。

QML_FILES_DEPLOY_PATHS 提供了与 QML_FILES 完全相同数量的元素的列表。其中 QML_FILES_DEPLOY_PATHS 的每个元素是目标路径下 QML_FILES 对应元素的部署路径。在 QML_FILES_DEPLOY_PATHS 中的路径包括文件名,因为这可能与因使用资源别名(参见 QT_RESOURCE_ALIAS)的 QML_FILES 中的文件名不同。

QML_FILES_DEPLOY_PATHS 中的条目也可以是空字符串。使用 qt_target_qml_sources() 添加任何具有自定义 PREFIX 的文件都不会有部署路径,因为通常使用自定义前缀意味着文件位于 QML 模块目标路径之外。

QML_FILES_PREFIX_OVERRIDES 提供了与 QML_FILES 完全相同数量的元素的其他列表。如果一个文件已通过前一段中描述的自定义前缀添加,则在 QML_FILES_PREFIX_OVERRIDES 中的对应条目将包含使用的自定义前缀。对于其他所有文件,它们的列表条目将为空字符串。

注意:作为一个特殊情况,如果 QML_FILES 列表中只有一个文件,那么根据该文件是否有自定义前缀,QML_FILES_DEPLOY_PATHSQML_FILES_PREFIX_OVERRIDES Maybe 空字符串。这是因为 CMake 表示列表和字符串的方式意味着不可能区分空字符串和只有一个空元素的列表。

RESOURCESRESOURCES_DEPLOY_PATHSRESOURCES_PREFIX_OVERRIDES 选项与上面讨论的 QML_FILES 类似。 RESOURCES 提供了作为 qt_add_qml_module()qt_target_qml_sources() 参数添加到 QML 模块的所有文件的列表。所有路径都将为绝对路径。 RESOURCES_DEPLOY_PATHSRESOURCES_PREFIX_OVERRIDES 的意义和用法分别遵循与 QML_FILES_DEPLOY_PATHSQML_FILES_PREFIX_OVERRIDES 相同的模式。

示例

cmake_minimum_required(VERSION 3.16...3.22)
project(MyThings)

find_package(Qt6 6.3 REQUIRED COMPONENTS Core Qml)

set(module_name "MyThings")
qt_add_qml_module(${module_name}
    URI My.Things
    VERSION 1.3
    RESOURCE_PREFIX org.mycompany/imports
    QML_FILES
        First.qml
        Second.qml
    RESOURCES
        Third.txt
)

qt_query_qml_module(${module_name}
    URI module_uri
    VERSION module_version
    PLUGIN_TARGET module_plugin_target
    TARGET_PATH module_target_path
    QMLDIR module_qmldir
    TYPEINFO module_typeinfo
    QML_FILES module_qml_files
    QML_FILES_DEPLOY_PATHS qml_files_deploy_paths
    RESOURCES module_resources
    RESOURCES_DEPLOY_PATHS resources_deploy_paths
)

message("My QML module URI is: ${module_uri}")
message("My QML module version is: ${module_version}")

# Install the QML module backing library
set(staging_prefix "staging")
install(TARGETS ${module_name}
    ARCHIVE DESTINATION "${staging_prefix}/${CMAKE_INSTALL_LIBDIR}"
    LIBRARY DESTINATION "${staging_prefix}/${CMAKE_INSTALL_LIBDIR}"
    RUNTIME DESTINATION "${staging_prefix}/${CMAKE_INSTALL_BINDIR}"
)
set(module_dir "${staging_prefix}/qml/${module_target_path}")

# Install the QML module runtime loadable plugin
install(TARGETS "${module_plugin_target}"
    LIBRARY DESTINATION "${module_dir}"
    RUNTIME DESTINATION "${module_dir}"
)

# Install the QML module meta information.
install(FILES "${module_qmldir}"   DESTINATION "${module_dir}")
install(FILES "${module_typeinfo}" DESTINATION "${module_dir}")

# Install QML files, possibly renamed.
list(LENGTH module_qml_files num_files)
math(EXPR last_index "${num_files} - 1")
foreach(i RANGE 0 ${last_index})
    list(GET module_qml_files       ${i} src_file)
    list(GET qml_files_deploy_paths ${i} deploy_path)
    get_filename_component(dst_name "${deploy_path}" NAME)
    get_filename_component(dest_dir "${deploy_path}" DIRECTORY)
    install(FILES "${src_file}" DESTINATION "${module_dir}/${dest_dir}" RENAME "${dst_name}")
endforeach()

# Install resources, possibly renamed.
list(LENGTH module_resources num_files)
math(EXPR last_index "${num_files} - 1")
foreach(i RANGE 0 ${last_index})
    list(GET module_resources       ${i} src_file)
    list(GET resources_deploy_paths ${i} deploy_path)
    get_filename_component(dst_name "${deploy_path}" NAME)
    get_filename_component(dest_dir "${deploy_path}" DIRECTORY)
    install(FILES "${src_file}" DESTINATION "${module_dir}/${dest_dir}" RENAME "${dst_name}")
endforeach()

© 2024 Qt 公司有限公司。此处所提供的文档贡献是各自所有者的版权。所提供的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款许可的。Qt 及相关标志是芬兰和/或其他国家的 Qt 公司的商标。所有其他商标均为其各自所有者的财产。