PassManager 类

class QQmlSA::PassManager

可以使用静态分析流程分析元素及其子元素。更多...

头文件 #include <PassManager>
CMakefind_package(Qt6 REQUIRED COMPONENTS QmlCompiler)
target_link_libraries(mytarget PRIVATE Qt6::QmlCompiler)
状态技术预览

公开函数

voidanalyze(const QQmlSA::Element &root)
std::unordered_map<quint32, QQmlSA::BindingInfo>bindingsByLocation() const
std::vector<std::shared_ptr<QQmlSA::ElementPass>>elementPasses() const
boolhasImportedModule(QAnyStringView module) const
boolisCategoryEnabled(QQmlSA::LoggerWarningId category) const
std::multimap<QString, QQmlSA::PropertyPassInfo>propertyPasses() const
voidregisterElementPass(std::unique_ptr<QQmlSA::ElementPass> pass)
boolregisterPropertyPass(std::shared_ptr<QQmlSA::PropertyPass> pass, QAnyStringView moduleName, QAnyStringView typeName, QAnyStringView propertyName = QAnyStringView(), bool allowInheritance = true)

详细说明

成员函数文档

void PassManager::analyze(const QQmlSA::Element &root)

root 及其所有子元素上运行元素流程。

std::unordered_map<quint32, QQmlSA::BindingInfo> PassManager::bindingsByLocation() const

通过它们的源位置返回绑定。

std::vector<std::shared_ptr<QQmlSA::ElementPass>> PassManager::elementPasses() const

返回元素流程的列表。

bool PassManager::hasImportedModule(QAnyStringView module) const

如果名为 module 的模块已被分析的 QML 导入,则返回 true,否则返回 false

此功能可以用于跳过注册特定的模块的流程。

if (passManager->hasImportedModule("QtPositioning"))
    passManager->registerElementPass(
       std::make_unique<PositioningPass>(passManager)
    );

另请参阅registerPropertyPass() 和 registerElementPass()。

bool PassManager::isCategoryEnabled(QQmlSA::LoggerWarningId category) const

category的警告启用时返回true,否则返回false

std::multimap<QString, QQmlSA::PropertyPassInfo> PassManager::propertyPasses() const

返回属性传递列表。

void PassManager::registerElementPass(std::unique_ptr<QQmlSA::ElementPass> pass)

将静态分析pass注册为在所有元素上运行。

bool PassManager::registerPropertyPass(std::shared_ptr<QQmlSA::PropertyPass> pass, QAnyStringView moduleName, QAnyStringView typeName, QAnyStringView propertyName = QAnyStringView(), bool allowInheritance = true)

为属性注册静态分析pass。此pass将在匹配moduleNametypeNamepropertyName的每个属性上运行。

省略propertyName将为此typeNamemoduleName匹配的所有属性注册此pass

allowInheritance设置为true意味着类型过滤也接受从typeName派生的类型。

pass作为std::shared_ptr传递,以便在多个元素上重复使用相同的pass

auto titleValiadorPass = std::make_shared<TitleValidatorPass>(manager);
manager->registerPropertyPass(titleValidatorPass,
                              "QtQuick", "Window", "title");
manager->registerPropertyPass(titleValidatorPass,
                              "QtQuick.Controls", "Dialog", "title");

注意:在过多项上运行分析pass可能很昂贵。这就是为什么通常最好使用moduleNametypeNamepropertyName来过滤传递的属性集。

如果成功添加传递,返回true,否则返回false。如果moduleNametypeName指定的Element不存在,则添加传递将失败。

另请参阅:PropertyPass.

© 2024 Qt公司有限公司。在此处包含的文档贡献归各自所有者所有。本提供的文档是根据自由软件基金会发布、受GNU自由文档许可证版本1.3的条款授权的。