Qt QML 编译器

Qt QML 编译器模块包含 QML 工具所需的共享功能,如 Qt Quick 编译器qmllint。它还提供了 QQmlSA 框架,可以使用该框架扩展工具内置的分析功能。

使用模块

使用 Qt 模块的 C++ API 需要链接到模块库,无论是直接链接还是通过其他依赖。几个构建工具都有专门的支持,包括 CMakeqmake

使用 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() 函数接受 moduleNametypeNamepropertyName 字符串作为参数。这些用于筛选受注册过程影响的属性集。

示例

QML 静态分析教程 展示了如何使用 QQmlSA 框架创建自定义 qmllint 过程。

参考

© 2024 Qt 公司有限公司。此处包含的文档贡献归其各自的拥有者所有。此处提供的文档根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款进行许可。Qt 和相应的标识是芬兰和其他国家的 The Qt 公司有限公司的商标。所有其他商标均为其各自所有者的财产。