Qt QML Compiler

Qt QML Compiler 模块包含 QML 工具所需的共享功能,如 Qt Quick CompilerqmllintQML 工具所需的共享功能。它还提供了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 Compiler 模块提供了QQmlSA 框架,该框架为 QML 代码的静态分析提供了工具。这些工具有助于确保语法有效性,并对 QML 反模式提出警告。

为 QML 程序添加静态分析可通过编写插件完成。它们会在 QML 代码的元素和属性上运行一系列分析传递。这些传值可在传值管理器(PassManager)中注册,传值管理器可保存传值,并可调用来分析元素及其子元素。通行证是对元素或属性的特定规则或条件的检查。如果条件得到满足,则通行证可以就代码中发现的问题向用户发出警告,甚至提出修复建议。之所以称为 "传递",是因为对元素和属性的分析是通过连续运行一系列传递来完成的。每一次分析只能发现一个特定的问题。组合一组通行证可以执行更复杂的分析,并共同组成一个插件。元素通行证由两个主要组件定义,即shouldRun()run() 。执行分析时,传递管理器将在遍历根元素的子元素时对遇到的每个元素执行传递。对于每个元素,如果shouldRun() 在该元素上求值后返回true ,那么run() 就会在该元素上执行。

属性传递会在三种不同事件中触发,即属性绑定、读取和写入时。这些可分别通过覆盖onBinding()onRead()onWrite() 函数来实现。

随着代码的增长,元素和属性的数量也在增加。对所有元素和属性进行静态分析会变得很昂贵。因此,在决定对哪些元素和属性进行分析时,最好采用细粒度的方法。对元素而言,shouldRun() ,目的是进行廉价检查,以确定是否应运行执行真正计算的run() 。对于属性,则在向管理器注册通行证时进行选择。registerPropertyPass() 函数将moduleNametypeNamepropertyName 字符串作为参数。这些字符串用于筛选受注册通行证影响的属性集。

示例

QML 静态分析教程》(QML Static Analysis Tutorial)展示了如何使用QQmlSA 框架创建自定义qmllint通证。

参考

© 2025 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.