Qt QML 编译器
Qt QML 编译器模块包含 QML 工具所需的共享功能,如 Qt Quick 编译器 和 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 代码的元素和属性上运行一系列分析过程。可以通过将过程注册到过程管理器中来进行这些过程,过程管理器保存这些过程,并可以调用它来分析元素及其子元素。一个过程是对元素或属性上评估的特定规则或条件进行检查。如果条件满足,该过程可以向用户警告代码中确定的问题,甚至可能建议修复方法。它被称为过程,因为对元素和属性的analysis是通过在它们上依次运行一系列过程来完成的。每个过程只能负责识别一个特定的问题。通过组合一系列过程,可以执行更复杂的分析,并共同形成一个插件。元素过程由两个主要组件定义,即 shouldRun()
和 run()
。当执行分析时,过程管理器将在遍历根元素的子元素时执行每个元素的过程。对于每个元素,如果对那个元素调用 shouldRun()
返回 true
,则在上面执行 run()
。对属性的过程会在三个不同的事件上触发,即当属性绑定时、当它被读取时以及当它被写入时。这可以通过分别覆盖 onBinding()
、onRead()
和 onWrite()
函数来实现。随着代码的增长,元素和属性的数量也会增加。对所有这些元素和属性执行静态分析可能会变得昂贵。这就是为什么在决定分析哪些元素和属性时要细化。对于元素,shouldRun()
的目的是进行一次便宜的检查,以确定是否需要运行执行实际计算的 run()
。对于属性,选择是在将过程注册到管理器时进行的。registerPropertyPass()
函数接受 moduleName
、typeName
和 propertyName
字符串作为参数。这些用于筛选受注册过程影响的属性集。
示例
QML 静态分析教程 展示了如何使用 QQmlSA
框架创建自定义 qmllint 过程。
参考
- Qt QML 编译器 C++ 类 - QmlCompiler 模块提供的 C++ API
- 使用静态分析能力进行 QML 工具化
© 2024 Qt 公司有限公司。此处包含的文档贡献归其各自的拥有者所有。此处提供的文档根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款进行许可。Qt 和相应的标识是芬兰和其他国家的 The Qt 公司有限公司的商标。所有其他商标均为其各自所有者的财产。