C
QmlProject手册
简介
qmlprojectexporter 是一款工具,允许自动生成项目中包含的所有资源和 .qml 文件的 C++ 代码。资源可以是 Qml 文件、图片、字体文件、翻译文件和 C++ 接口。您需要将 .qmlproject 文件作为主要参数提供给 qmlprojectexporter
。此文件定义了项目结构,可能依赖于其他 .qmlproject 模块文件。
.qmlproject 文件
.qmlproject 文件的语法与 Qml 文档 使用相同的语法。.qmlproject 文件的目的在于描述项目结构。与 QML 文件类似,.qmlproject 文件包含一个导入部分,后面跟着一组节点或对象,从根节点(本例中为 Project)开始,每个节点都有一个预定义的属性集。导入部分主要由 "import QmlProject 1.3" 组成,这表示这是一个 .qmlproject 文件,并指定了您将要使用的 API 版本。
迁移指南
您可以将现有项目迁移到使用 .qmlproject
。有关更多信息,请参阅迁移到QmlProject指南。
带有平台源代码的项目导出
您可以使用 qmlprojectexporter
命令行工具将 QmlProject 与平台源代码一起导出。这简化了将 Qt for MCUs 集成到第三方 IDE 或自定义构建系统的过程。有关如何使用此功能的详细说明,请参阅 带有平台源代码的Qt for MCUs项目导出。
节点
每个节点配置项目(Qml 文件、图片、模块等)的特定部分。您可能能够无限次在项目根节点中定义某些节点,例如 ImageFiles。其他节点您只能定义一次,例如,MCU.Module。
注意: 当前的 .qmlproject 文件层次结构的深度为两个,这意味着 Project 节点是唯一包含节点的节点。其他节点只能定义属性。
属性
您可以将.qmlproject文件中的属性视为配置参数。每个节点都有预定义的可能配置集。
在项目文件中,将它们放置在MCU.Config节点内时,您可以将其分配给支持它们的所有节点,如果未在其默认节点(如ImageFiles)中找到相应属性,则MCU.Config
中定义的值将生效。那些配置属性具有"MCU."前缀。更多信息请见MCU.Config。
节点
项目
每个qmlproject
文件都将Project
节点作为其根节点,这个根节点包含其他所有提供更多项目信息的节点。
qmlproject
文件结构有两级限制:Project
及其子节点。qmprojectexporter
会忽略放置在第三级的节点。
用法
Project { projectRootPath: "..." ... MCU.Config {...} ... ImageFiles {...} ... }
以下是Project节点中可用的属性的列表
启用基于文本ID的翻译。 | |
存储模块文件的路径列表。 | |
定义应用第一个UI屏幕的QML源文件。 | |
设置应用的主语言。 | |
项目的根路径 | |
一个标志,表示项目是Qt for MCUs项目。 |
QmlFiles
您可以使用此节点列出项目的QML文件,可以是相对路径或绝对路径到QML文件。
注意:相对路径应该是相对于qmlproject
文件。
用法
QmlFiles { files: ["src/other.qml"] }
以下是QmlFiles节点中可用的属性的列表
启用将QML文件复制到输出目录。 | |
包含QML文件的目录。 | |
字符串列表,指定选择QML文件时要使用的变体。 | |
QML文件列表。 |
ImageFiles
ImageFiles节点将给定的图像资源添加到项目中。
此外,给定节点中指定的属性会影响qulrcc-tool对这些资源的编码方式。
您可以在同一项目中配置多个ImageFiles,在设置每组图像的不同属性时需要这样做。
如果您在ImageFiles节点中未定义给定属性,qmlprojectexporter
将使用MCU.Config节点中提供的默认值。如果没有在定义该节点中,它将依赖于全局默认值。
用法
Project { ... ImageFiles { files: [...] MCU.resourceOptimizeForRotation: true } ... }
以下是ImageFiles节点中可用的属性的列表
定义资产的基路径。 | |
为文件的URI添加一个公共前缀。 | |
标识可用于AnimatedSpriteDirectory帧的图像。 | |
指定用于资源优化精灵动画的帧高度。 | |
指定用于资源优化精灵动画的帧宽度。 | |
指定用于裁剪图像优化的模式。 | |
定义图像缓存策略。 | |
以压缩格式存储图像。 | |
设置图像资源首选的像素格式。 | |
保留资产中的原始数据不变。 | |
启用在运行时旋转图像的优化。 | |
启用在运行时缩放图像的优化。 | |
定义资产运行时分配类型。 | |
定义资产的存储部分。 | |
添加包含图像资产的目录。 | |
字符串列表,指定在挑选图像文件时要使用的变体。 | |
图像资产列表。 |
纹理数据的字节对齐 | |
启用将图像分割为不透明段优化的功能。 |
FontFiles
您可以使用此节点列出项目中所需字体文件。有关支持的字体文件格式,请参阅字体格式。
用法
Project { ... FontFiles { files: [...] } ... }
以下是FontFiles节点中可用的属性列表
添加指定目录中的所有字体文件。 | |
字符串列表,指定在挑选字体文件时要使用的变体。 | |
列出要添加的字体文件。 |
TranslationFiles
您可以使用此节点将翻译文件添加到项目中(.ts)。
qmlprojectexporter 调用相应的工具将这些翻译文件转换为.qm文件,这是 Qt 管理翻译使用的二进制格式。
在 QML 源中,您可以使用 qsTr()
或 qsTrId()
来标记可翻译的字符串。在运行时,翻译系统会在当前系统区域设置的翻译文件中查找匹配的字符串。
用法
Project { ... TranslationFiles { files: [...] } ... }
以下属性在TranslationFiles节点中受支持
指示是否包含或排除源语言字符串。 | |
添加包含翻译文件的目录。 | |
字符串列表,指定在挑选翻译文件时要使用的变体。 | |
添加翻译文件列表。 |
InterfaceFiles
此节点提供特定于 C++ 接口的配置。可以定义 C++ 接口并使它们对 Qml 可见,而无需在 QML 文件中导入它们。QMlProjectExporter 根据 C++ 接口的头文件生成 QML 代码,这样同一项目中的其他 QML 文件就可以引用它们。
用法
Project { ... InterfaceFiles { files: [...] } ... }
以下是 InterfaceFiles 节点中可用的属性列表
列出 QML 导入。 | |
提供一个包含 C++ 接口文件的目录。 | |
字符串列表,指定在挑选头文件时要使用的变体。 | |
列出 C++ 接口文件。 |
MCU.Config
您可以使用此节点为 QmlProject 文件定义默认值。在此节点上下文中定义的属性不需要使用 "MCU."
前缀,如果您在特定的节点(如 ImageFiles、FontFiles 等)中用这个属性,则需要使用。
用法
//node1 MCU.Config { // Project-wide default value for resourceOptimizeForRotation. resourceOptimizeForRotation: true } ImageFiles { // Here resourceOptimizeForRotation was explicitly defined for a specific ImageFiles node. MCU.resourceOptimizeForRotation: false // requires the "MCU."prefix } //node2 ImageFiles { // MCU.resourceOptimizeForRotation was not defined but the value \c true will be // picked from MCU.Config. }
以下是 MCU.Config 中可用的属性列表
将 Qt 针对 MCU 的默认字体文件添加到项目中。 | |
此选项控制静态字体引擎的自动字形生成。 | |
定义了如何包含图像资源的二进制资产数据 | |
启用渲染复杂脚本 | |
选择Qt Quick Controls的样式。 | |
指示是否包含JavaScript字节码 | |
指示是否将#line指令添加到QML源。 | |
为文本项设置默认字体族。 | |
为文本项设置默认字体质量。 | |
将屏幕内容顺时针旋转。 | |
字符串列表,指定对qmlproject文件中的节点使用默认哪些变体。 | |
控制字体缓存预分配。 | |
控制字体缓存初始化。 | |
设置字体引擎使用的最大缓存大小。 | |
为项目选择一个字体引擎。 | |
配置将应用程序的字体文件复制到RAM以实现更快的访问。 | |
控制将应用程序的字体文件复制到RAM。 | |
配置字体文件的资源存储部分。 | |
控制字体引擎使用的堆缓冲区的预分配。 | |
为字体引擎定义最大堆大小。 | |
控制是否使用矢量轮廓进行文本渲染 | |
配置将先前光栅化的字形数据复制到RAM以实现更快的访问。 | |
配置将先前光栅化的字形数据复制到RAM时使用的运行时分配类型。 | |
配置用于先前光栅化字形数据的资源存储部分。 | |
设置字符的最大段落大小。 | |
定义一个运行时分配类型的最大资源缓存大小。 | |
将静态文本项的字形合并为单个图像。 | |
MCU.Config.platformAlphaCompressedLosslessResourcePixelFormat | 为无损压缩透明的图像资产定义默认格式。 |
透明图像资产的默认像素格式。 | |
逗号分隔的资源存储部分列表,用于字节交换 | |
为平台层引擎设置默认渲染提示。 | |
定义图像数据的最小对齐。 | |
MCU.Config.platformOpaqueCompressedLosslessResourcePixelFormat | 为不透明的图像资产的无损压缩定义默认像素格式。 |
不透明图像资产的默认像素格式。 | |
定义图像所需像素对齐 | |
设置给定平台的渲染批处理高度。 | |
启用或禁用桌面后端的旋转功能。 |
MCU.Module
此节点的作用是声明一个qmlproject文件作为模块。模块可以包含资产、接口、QML组件和翻译。基于qmlproject的项目可以使用QmlProject的ModuleFiles节点来利用基于qmlproject的模块。
注意: qmlproject
文件可以包含一个MCU.Module
节点。
用法
// mymodule.qmlproject import QmlProject 1.3 Project { MCU.Module { uri: "custom.module" } QmlFiles { files: ["CustomBox.qml"] } } // CustomBox.qml // ... some qml code // main.qmlproject import QmlProject 1.3 Project { QmlFiles { files: ["main.qml"] } ModuleFiles { files: ["mymodule.qmlproject"] } // main.qml import QtQuick 2.15 import custom.module Rectangle { CustomBox {} }
Qul 模块
Qt Quick Ultralite附带以下预定义模块,项目可以使用ModuleFiles.MCU.qulModules
- 控件
- 控件模板
- 虚拟键盘
- 性能分析
- 形状
- 工作室组件
- 时间轴
以下是在MCU.Module节点中可用的属性列表
为模块生成类型信息文件。 | |
为模块定义一个URI。 |
ModuleFiles
您可以使用此节点将QML模块导入项目。
用法
Project { ... ModuleFiles { MCU.qulModules: [...] ... } ... }
以下是在ModuleFiles节点中可用的属性列表
一个Qt Quick Ultralite模块列表,项目应链接到这些模块。 | |
添加一个包含QML模块文件的目录。 | |
一个字符串列表,指定选择模块文件时使用的变体。 | |
添加一个qmlproject文件的列表。 |
命令行参考
qmlprojectexporter
使用(qmlprojectexporter)将QML源代码、图像资源和字体导出为可编译的C++代码。它解析一个.qmlproject
文件,列出资产和导出选项。此外,qmlprojectexporter还导出导入和导出文件的纯文本列表,方便第三方构建系统(例如CMake)的自动使用。
在CMake项目中使用qmlprojectexporter
使用CMake构建系统与qmlprojectexporter
一起使用很简单,自定义CMake宏qul_add_target已经处理了使用正确的参数调用qmlprojectexporter
,并需要定义QML_PROJECT参数,其后跟一个qmlproject文件,如下所示。
// Adding the \l GENERATE_ENTRYPOINT option will generate an application entrypoint automatically, // but it requires setting the \l Project.mainFile property qul_add_target(my_project QML_PROJECT my_project.qmlproject GENERATE_ENTRYPOINT) // Note for a working Qul application with CMake it is still required to call \l app_target_setup_os macro // after adding the qmlproject target. app_target_setup_os(myproject)
在调用qmlprojectexporter
时,以下CMake宏不再需要,因为调用qmlprojectexporter
意味着执行相同的功能。
- qul_target_qml_sources
- qul_target_generate_interfaces
- qul_target_embed_translations
- qul_add_qml_module
所有替换为QmlProject的CMake标志在CMake手册中已被标记为弃用。
使用单独的qmlprojectexporter
当使用除CMake以外的构建系统时,仍然可以直接使用qmlprojectexporter
。您可以使用生成资产文件在选择的构建系统中。
qmlprojectexporter --outdir output_directory myproject.qmlproject
以下是qmlprojectexporter
的命令行参数的扩展列表
板级SDK的路径 | |
包含板级默认属性值的 | |
覆盖控件样式 | |
指定接口文件应使用的C++标准 | |
使用此标志以在更新现有项目时重新导出平台源代码 | |
使用Qt for MCUs扩展现有项目 | |
生成包含全局默认值和可选的板级默认值的文件 | |
控制qmlprojectexporter是否生成默认应用程序入口点 | |
列出命令行参数。 | |
从IDE复制的硬件代码源文件的输出目录 | |
包括目录的逗号分隔列表。 | |
在项目中包含IDE生成的硬件代码 | |
ResourceGenerator.exe的路径(用于与TRAVEO™ T2G板配合使用RLE支持) | |
禁用为构建系统导出配置信息的命令行选项 | |
禁用导出 C++ 源代码。 | |
禁用项目内模块的导出。 | |
使用此标志防止在生成的项目中导出平台源代码。 | |
跳过导出 QmlProject。 | |
输出目录。 | |
最大并行进程数。 | |
目标平台的可选标识。 | |
自定义平台的构建目录。 | |
描述平台目标的元数据文件。 | |
导出平台源的输出目录。 | |
IDE 项目文件的输出目录。 | |
设置导出项目的类型。 | |
指定包含自定义 QML 模块到默认模块映射的文件路径。 | |
生成文件的输出目录。 | |
rc.exe 的路径(用于 MSVC 工具链)。 | |
选择项目变体的选择器的逗号分隔列表。 | |
使用生成的源文件指定目标类型。 | |
指定用于编译生成的文件的工具链。 | |
更新现有项目中的 Qt for MCUs 部分。 | |
启用更新翻译文件。 | |
将调用其他工具的标准输出。 | |
qmlproject 文件的路径。 |
qmlprojectexporter 生成的文件
在 输出目录 中生成的文件取决于您使用的命令行参数。要更好地了解 qmlprojectexporter
在项目构建过程中所发挥的作用,请参阅 Qt Quick Ultralite 工具。以下是根据下一个示例可能生成的文件列表:
考虑到以下启动项目文件
常量 | 描述 |
---|---|
my_project.qmlproject | 项目的主要配置文件 |
main.qml | 进入项目的入口文件 |
无导出
qmlprojectexporter --no-export-cpp --no-export-modules --no-export-configuration --outdir output my_project.qmlproject
运行此命令将创建 输出
目录,但其中不包含文件,因为命令禁用了所有导出。
导出配置
qmlprojectexporter --no-export-cpp --no-export-modules --outdir output my_project.qmlproject
移除 --no-export-configuration 参数将导致以下文件
常量 | 描述 |
---|---|
output/config/my_project.1.compiler_outputs.txt | 列出由 Qt Quick Ultralite 工具 生成的所有文件。 |
output/config/my_project.1.input.txt | 表明 qmlprojectexporter 使用哪些输入文件来生成 c++ 文件,在 my_project 情况下,它是只有一个 main.qml 。 |
output/config/my_project.1.libraries.txt | 列出构建系统需要链接的库。 |
output/config/my_project.1.linker_options.txt | 告诉构建系统需要添加哪些链接器选项才能构建项目。 |
前面的命令提供了获取项目预期的资源或配置信息的方法,而无需生成文件的开销。
导出 CPP 文件
qmlprojectexporter --no-export-modules --outdir output my_project.qmlproject
虽然移除 --no-export-configuration
会列出配置,但移除 --no-export-cpp
将为项目生成所有实际的 CPP
文件。有关负责哪些文件的工具的介绍,请参阅 Qt Quick Ultralite 工具。
导出模块
qmlprojectexporter --outdir output my_project.qmlproject
在没有--no-export-modules的情况下运行早期的qmlprojectexporter
示例,对输出文件夹的影响不大,因为示例没有使用任何模块文件。然而,当项目完整地导出其模块时,在第三方工具使用的输出目录中会出现两个文件,这些文件是:
常量 | 描述 |
---|---|
output/config/input.json | 一个结构化文件,列出项目使用的所有输入,以及项目导入的模块使用的文件,以及递归导入模块中使用的文件。 |
generate_files.txt | 包含键值对,CMake使用这些键值对推断qmlprojectexporter 生成的入口点文件的名称,主要用于指定--generate-entypoint时,因为生成的文件可以根据应用程序的目标类型(可执行文件|静态库)而变化。 |
要看到--no-export-modules的主要影响,可以考虑新的项目文件
常量 | 描述 |
---|---|
module1/module1.qmlproject | 为module1的配置文件,通过在my_project.qmlproject 中使用ModuleFiles导入 |
module1/module1.qml | 存在于module1 QmlFiles中的Qml文件,并在main.qml 中使用 |
使用新文件运行早期的qmlprojectexporter
命令将导致以下结果
常量 | 描述 |
---|---|
output/module1/* | 包含用于module1的CPP 文件的文件夹,类似于output/ 文件夹 |
output/config/module1.1.compiler_outputs.txt | 列出Qt Quick Ultralite工具为module1生成的所有文件。 |
output/config/module1.1.input.txt | 指示用于生成module1 c++文件的文件。 |
output/config/module1.1.libraries.txt | module1引入的更多库依赖。 |
output/config/module1.1.linker_options.txt | 告诉更多由module1引入的链接选项。 |
如果省略--no-export-modules并使用--no-export-cpp,则qmlprojectexporter
会生成配置txt文件。
导出模块
当你有一个现有的入口点时,下一步生成的文件是不必要的。考虑以下命令。
//[1] qmlprojectexporter --generate-entrypoint --target-type executable --outdir output my_project.qmlproject //[2] qmlprojectexporter --generate-entrypoint --target-type static_library --outdir output my_project.qmlproject
qmlprojectexporter
根据--target-type标志向生成的文件列表中引入新文件。当使用可执行文件时
常量 | 描述 |
---|---|
output/main.cpp | 包含应用程序中main()函数的主.cpp文件。 |
当使用静态库时
常量 | 描述 |
---|---|
output/qul_run.h | 静态库的接口 |
output/my_project_qul_run.cpp | 静态库接口的实现。 |
在一定的Qt许可下可用。
了解更多信息。