Qt Qml 编译器
Qt Qml 编译器模块包含QML工具(如 Qt Quick Compiler 和qmllint 等所需的共享功能。它还提供了QQmlSA 框架,可用于扩展这些工具的内置分析能力。
使用该模块
要使用 Qt 模块的 C++ API,需要将模块库链接到项目中,既可以直接链接,也可以通过其他依赖项间接链接。包括CMake和qmake 在内的多种构建工具都为此提供了专门的支持。
使用 CMake 构建
使用find_package() 命令在Qt6 软件包中定位所需的模块组件:
find_package(Qt6 REQUIRED COMPONENTS QmlCompiler)
target_link_libraries(mytarget PRIVATE Qt6::QmlCompiler)更多详细信息,请参阅“使用 CMake 构建”概述。
使用 qmake 构建
要配置模块以便使用 qmake 进行构建,请在项目的 .pro 文件中将该模块作为QT 变量的值添加:
QT += QmlCompiler使用 QQmlSA 框架
Qt Qml 编译器模块提供了QQmlSA 框架,该框架为 QML 代码的静态分析提供了工具。这些工具有助于确保语法正确性,并针对 QML 反模式发出警告。
要为 QML 程序添加静态分析功能,需要编写插件。这些插件将对 QML 代码中的元素和属性执行一系列分析过程。这些分析过程可以注册到 PassManager 中,该管理器负责管理这些过程,并可被调用以分析某个元素及其子元素。 一个分析阶段是对元素或属性进行特定规则或条件检查的过程。如果条件成立,该分析阶段可以向用户发出代码中已识别问题的警告,甚至可能建议修复方案。之所以称为“分析阶段”,是因为对元素和属性的分析是通过依次运行一组分析阶段来完成的。 每个“pass”应仅负责识别一个特定问题。组合一组“pass”可以执行更复杂的分析,并共同构成一个插件。元素“pass”由两个主要组件定义,即shouldRun() 和run() 。在执行分析时,PassManager 将在遍历根元素的子元素时,对遇到的每个元素执行该“pass”。 对于每个元素,如果对该元素评估shouldRun() 返回true ,则对其执行run() 。
针对属性的分析阶段会在三种不同事件中触发:即属性被绑定时、被读取时以及被写入时。这些事件可通过分别重写onBinding() 、onRead() 和onWrite() 函数来实现。
随着代码规模的扩大,元素和属性的数量也会增加。对所有元素和属性执行静态分析处理可能会变得代价高昂。因此,在决定分析哪些元素和属性时,采取精细化策略是明智之举。对于元素而言,shouldRun() 旨在作为一项低成本检查,用于确定是否应运行run() (该函数执行实际计算)。 对于属性,筛选是在向管理器注册处理阶段时进行的。registerPropertyPass() 函数接受moduleName 、typeName 和propertyName 这三个字符串作为参数。这些参数用于筛选受已注册处理阶段影响的属性集合。
示例
QML静态分析教程演示了如何使用QQmlSA 框架创建自定义qmllint检查。
参考
- Qt Qml Compiler C++ Classes - QmlCompiler 模块提供的 C++ API
- 利用静态分析功能的 QML 工具
许可
Qt Qml 该编译器由The Qt Company 提供商业许可。此外,它还遵循附带Qt GPL 例外 1.0 的 GNU 通用公共许可证第 3 版。更多详情请参阅Qt 许可条款。
© 2026 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.