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 模块target 的信息。该target 必须已由qt_add_qml_module() 创建,或已传递给qt_add_qml_module()target 不能是导入的目标。

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

参数

每个可选参数都指定了一个变量名,用于存储相应的 QML 模块属性。

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

PLUGIN_TARGET 可用于获取 QML 模块的插件目标名称。并非所有 QML 模块都有插件,因此该选项返回的值可能是空字符串。如果 QML 模块没有单独的支持目标,那么 将与插件目标相同。target

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

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

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

TYPEINFO 如果模块有 typeinfo 文件,则提供该文件的路径。如果模块没有 typeinfo 文件,它将是一个空字符串。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 可能是空字符串,这取决于该文件是否有自定义前缀。这是因为 CMake 表示列表和字符串的方式意味着无法区分空字符串和具有单个空元素的列表。

RESOURCESRESOURCES_DEPLOY_PATHSRESOURCES_PREFIX_OVERRIDES 选项与上面讨论的QML_FILES 类似。RESOURCES 提供了一个添加到 QML 模块的所有文件的列表,作为RESOURCES 的参数,可用于qt_add_qml_module()qt_target_qml_sources ()。所有路径都是绝对路径。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()

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.