PassManager 类
class QQmlSA::PassManager可以使用静态分析流程分析元素及其子元素。更多...
头文件 | #include <PassManager> |
CMake | find_package(Qt6 REQUIRED COMPONENTS QmlCompiler) target_link_libraries(mytarget PRIVATE Qt6::QmlCompiler) |
状态 | 技术预览 |
公开函数
void | analyze(const QQmlSA::Element &root) |
std::unordered_map<quint32, QQmlSA::BindingInfo> | bindingsByLocation() const |
std::vector<std::shared_ptr<QQmlSA::ElementPass>> | elementPasses() const |
bool | hasImportedModule(QAnyStringView module) const |
bool | isCategoryEnabled(QQmlSA::LoggerWarningId category) const |
std::multimap<QString, QQmlSA::PropertyPassInfo> | propertyPasses() const |
void | registerElementPass(std::unique_ptr<QQmlSA::ElementPass> pass) |
bool | registerPropertyPass(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将在匹配moduleName、typeName和propertyName的每个属性上运行。
省略propertyName将为此typeName和moduleName匹配的所有属性注册此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可能很昂贵。这就是为什么通常最好使用moduleName、typeName和propertyName来过滤传递的属性集。
如果成功添加传递,返回true
,否则返回false
。如果moduleName和typeName指定的Element不存在,则添加传递将失败。
另请参阅:PropertyPass.
© 2024 Qt公司有限公司。在此处包含的文档贡献归各自所有者所有。本提供的文档是根据自由软件基金会发布、受GNU自由文档许可证版本1.3
的条款授权的。