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节点中可用的属性的列表

Project.idBasedTranslations

启用基于文本ID的翻译。

Project.importPaths

存储模块文件的路径列表。

Project.mainFile

定义应用第一个UI屏幕的QML源文件。

Project.primaryLanguage

设置应用的主语言。

Project.projectRootPath

项目的根路径

Project.qtForMCUs

一个标志,表示项目是Qt for MCUs项目。

QmlFiles

您可以使用此节点列出项目的QML文件,可以是相对路径或绝对路径到QML文件。

注意:相对路径应该是相对于qmlproject文件。

用法

QmlFiles {
    files: ["src/other.qml"]
}

以下是QmlFiles节点中可用的属性的列表

QmlFiles.copyQmlFiles

启用将QML文件复制到输出目录。

QmlFiles.directory

包含QML文件的目录。

QmlFiles.fileSelector

字符串列表,指定选择QML文件时要使用的变体。

QmlFiles.files

QML文件列表。

ImageFiles

ImageFiles节点将给定的图像资源添加到项目中。

此外,给定节点中指定的属性会影响qulrcc-tool对这些资源的编码方式。

您可以在同一项目中配置多个ImageFiles,在设置每组图像的不同属性时需要这样做。

如果您在ImageFiles节点中未定义给定属性,qmlprojectexporter将使用MCU.Config节点中提供的默认值。如果没有在定义该节点中,它将依赖于全局默认值。

用法

Project {
    ...
    ImageFiles {
        files: [...]
        MCU.resourceOptimizeForRotation: true
    }
    ...
}

以下是ImageFiles节点中可用的属性的列表

ImageFiles.MCU.base

定义资产的基路径。

ImageFiles.MCU.prefix

为文件的URI添加一个公共前缀。

ImageFiles.MCU.resourceAnimatedSprite

标识可用于AnimatedSpriteDirectory帧的图像。

ImageFiles.MCU.resourceAnimatedSpriteFrameHeight

指定用于资源优化精灵动画的帧高度。

ImageFiles.MCU.resourceAnimatedSpriteFrameWidth

指定用于资源优化精灵动画的帧宽度。

ImageFiles.MCU.resourceAnimatedSpriteOptimizations

指定用于裁剪图像优化的模式。

ImageFiles.MCU.resourceAsFile

ImageFiles.MCU.resourceCachePolicy

定义图像缓存策略。

ImageFiles.MCU.resourceCompression

以压缩格式存储图像。

ImageFiles.MCU.resourceImagePixelFormat

设置图像资源首选的像素格式。

ImageFiles.MCU.resourceKeepRawData

保留资产中的原始数据不变。

ImageFiles.MCU.resourceOptimizeForRotation

启用在运行时旋转图像的优化。

ImageFiles.MCU.resourceOptimizeForScale

启用在运行时缩放图像的优化。

ImageFiles.MCU.resourceRuntimeAllocationType

定义资产运行时分配类型。

ImageFiles.MCU.resourceStorageSection

定义资产的存储部分。

ImageFiles.directory

添加包含图像资产的目录。

ImageFiles.fileSelector

字符串列表,指定在挑选图像文件时要使用的变体。

ImageFiles.files

图像资产列表。

实验属性

ImageFiles.MCU.Experimental.resourceAlignment

纹理数据的字节对齐

ImageFiles.MCU Experimental.resourceSplitImageOptimization

启用将图像分割为不透明段优化的功能。

FontFiles

您可以使用此节点列出项目中所需字体文件。有关支持的字体文件格式,请参阅字体格式

用法

Project {
    ...
    FontFiles {
        files: [...]
    }
    ...
}

以下是FontFiles节点中可用的属性列表

FontFiles.directory

添加指定目录中的所有字体文件。

FontFiles.fileSelector

字符串列表,指定在挑选字体文件时要使用的变体。

FontFiles.files

列出要添加的字体文件。

TranslationFiles

您可以使用此节点将翻译文件添加到项目中(.ts)。

qmlprojectexporter 调用相应的工具将这些翻译文件转换为.qm文件,这是 Qt 管理翻译使用的二进制格式。

在 QML 源中,您可以使用 qsTr()qsTrId() 来标记可翻译的字符串。在运行时,翻译系统会在当前系统区域设置的翻译文件中查找匹配的字符串。

用法

Project {
    ...
    TranslationFiles {
        files: [...]
    }
    ...
}

以下属性在TranslationFiles节点中受支持

TranslationFiles.MCU.omitSourceLanguage

指示是否包含或排除源语言字符串。

TranslationFiles.directory

添加包含翻译文件的目录。

TranslationFiles.fileSelector

字符串列表,指定在挑选翻译文件时要使用的变体。

TranslationFiles.files

添加翻译文件列表。

InterfaceFiles

此节点提供特定于 C++ 接口的配置。可以定义 C++ 接口并使它们对 Qml 可见,而无需在 QML 文件中导入它们。QMlProjectExporter 根据 C++ 接口的头文件生成 QML 代码,这样同一项目中的其他 QML 文件就可以引用它们。

用法

Project {
    ...
    InterfaceFiles {
        files: [...]
    }
    ...
}

以下是 InterfaceFiles 节点中可用的属性列表

InterfaceFiles.MCU.qmlImports

列出 QML 导入。

InterfaceFiles.directory

提供一个包含 C++ 接口文件的目录。

InterfaceFiles.fileSelector

字符串列表,指定在挑选头文件时要使用的变体。

InterfaceFiles.files

列出 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 中可用的属性列表

MCU.Config.addDefaultFonts

将 Qt 针对 MCU 的默认字体文件添加到项目中。

MCU.Config.autoGenerateGlyphs

此选项控制静态字体引擎的自动字形生成。

MCU.Config.binaryAssetOptions

定义了如何包含图像资源的二进制资产数据

MCU.Config.complexTextRendering

启用渲染复杂脚本

MCU.Config.controlsStyle

选择Qt Quick Controls的样式。

MCU.Config.debugBytecode

指示是否包含JavaScript字节码

MCU.Config.debugLineDirectives

指示是否将#line指令添加到QML源。

MCU.Config.defaultFontFamily

为文本项设置默认字体族。

MCU.Config.defaultFontQuality

为文本项设置默认字体质量。

MCU.Config.displayRotationAngle

将屏幕内容顺时针旋转。

MCU.Config.fileSelector

字符串列表,指定对qmlproject文件中的节点使用默认哪些变体。

MCU.Config.fontCachePrealloc

控制字体缓存预分配。

MCU.Config.fontCachePriming

控制字体缓存初始化。

MCU.Config.fontCacheSize

设置字体引擎使用的最大缓存大小。

MCU.Config.fontEngine

为项目选择一个字体引擎。

MCU.Config.fontFilesCachePolicy

配置将应用程序的字体文件复制到RAM以实现更快的访问。

MCU.Config.fontFilesRuntimeAllocationType

控制将应用程序的字体文件复制到RAM。

MCU.Config.fontFilesStorageSection

配置字体文件的资源存储部分。

MCU.Config.fontHeapPrealloc

控制字体引擎使用的堆缓冲区的预分配。

MCU.Config.fontHeapSize

为字体引擎定义最大堆大小。

MCU.Config.fontVectorOutlinesDrawing

控制是否使用矢量轮廓进行文本渲染

MCU.Config.glyphsCachePolicy

配置将先前光栅化的字形数据复制到RAM以实现更快的访问。

MCU.Config.glyphsRuntimeAllocationType

配置将先前光栅化的字形数据复制到RAM时使用的运行时分配类型。

MCU.Config.glyphsStorageSection

配置用于先前光栅化字形数据的资源存储部分。

MCU.Config.maxParagraphSize

设置字符的最大段落大小。

MCU.Config.maxResourceCacheSize

定义一个运行时分配类型的最大资源缓存大小。

MCU.Config.mergeStaticTextGlyphs

将静态文本项的字形合并为单个图像。

MCU.Config.platformAlphaCompressedLosslessResourcePixelFormat

为无损压缩透明的图像资产定义默认格式。

MCU.Config.platformAlphaPixelFormat

透明图像资产的默认像素格式。

MCU.Config.platformByteSwapResourceStorageSections

逗号分隔的资源存储部分列表,用于字节交换

MCU.Config.platformDefaultLayerRenderingHints

为平台层引擎设置默认渲染提示。

MCU.Config.platformImageAlignment

定义图像数据的最小对齐。

MCU.Config.platformOpaqueCompressedLosslessResourcePixelFormat

为不透明的图像资产的无损压缩定义默认像素格式。

MCU.Config.platformOpaquePixelFormat

不透明图像资产的默认像素格式。

MCU.Config.platformPixelWidthAlignment

定义图像所需像素对齐

MCU.Config.platformRenderBatchHeight

设置给定平台的渲染批处理高度。

MCU.Config.showDesktopPreviewInNaturalDisplayOrientation

启用或禁用桌面后端的旋转功能。

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节点中可用的属性列表

MCU.Module.generateQmltypes

为模块生成类型信息文件。

MCU.Module.uri

为模块定义一个URI。

ModuleFiles

您可以使用此节点将QML模块导入项目。

用法

Project {
    ...
    ModuleFiles {
        MCU.qulModules: [...]
        ...
    }
    ...
}

以下是在ModuleFiles节点中可用的属性列表

ModuleFiles.MCU.qulModules

一个Qt Quick Ultralite模块列表,项目应链接到这些模块。

ModuleFiles.directory

添加一个包含QML模块文件的目录。

ModuleFiles.fileSelector

一个字符串列表,指定选择模块文件时使用的变体。

ModuleFiles.files

添加一个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意味着执行相同的功能。

所有替换为QmlProject的CMake标志在CMake手册中已被标记为弃用。

使用单独的qmlprojectexporter

当使用除CMake以外的构建系统时,仍然可以直接使用qmlprojectexporter。您可以使用生成资产文件在选择的构建系统中。

qmlprojectexporter --outdir output_directory myproject.qmlproject

以下是qmlprojectexporter的命令行参数的扩展列表

--board-sdk

板级SDK的路径

--boarddefaults

包含板级默认属性值的BoardDefaults<@op>.</@op>>qmlprojectconfig文件的路径

--controls-style

覆盖控件样式

--cxx-standard

指定接口文件应使用的C++标准

--export-platform

使用此标志以在更新现有项目时重新导出平台源代码

--extend-project

使用Qt for MCUs扩展现有项目

--generate-default-values

生成包含全局默认值和可选的板级默认值的文件

--generate-entrypoint

控制qmlprojectexporter是否生成默认应用程序入口点

--help

列出命令行参数。

--ide-sources-outdir

从IDE复制的硬件代码源文件的输出目录

--include-dirs

包括目录的逗号分隔列表。

--include-ide-generated-hw-code

在项目中包含IDE生成的硬件代码

--infineon-resource-generator

ResourceGenerator.exe的路径(用于与TRAVEO™ T2G板配合使用RLE支持)

--no-export-configuration

禁用为构建系统导出配置信息的命令行选项

--no-export-cpp

禁用导出 C++ 源代码。

--no-export-modules

禁用项目内模块的导出。

--no-export-platform

使用此标志防止在生成的项目中导出平台源代码。

--no-export-qml

跳过导出 QmlProject。

--outdir

输出目录。

--parallel

最大并行进程数。

--platform

目标平台的可选标识。

--platform-build-dir

自定义平台的构建目录。

--platform-metadata

描述平台目标的元数据文件。

--platform-outdir

导出平台源的输出目录。

--project-outdir

IDE 项目文件的输出目录。

--project-type

设置导出项目的类型。

--qml-mappings-dir

指定包含自定义 QML 模块到默认模块映射的文件路径。

--qmlproject-outdir

生成文件的输出目录。

--resource-compiler

rc.exe 的路径(用于 MSVC 工具链)。

--selector

选择项目变体的选择器的逗号分隔列表。

--target-type

使用生成的源文件指定目标类型。

--toolchain

指定用于编译生成的文件的工具链。

--update-project

更新现有项目中的 Qt for MCUs 部分。

--update-translations

启用更新翻译文件。

--verbose

将调用其他工具的标准输出。

qmlprojectfile

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.txtmodule1引入的更多库依赖。
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许可下可用。
了解更多信息。