QQmlParserStatus 类

QQmlParserStatus 类提供关于 QML 解析器状态的更新。更多...

头部 #include <QQmlParserStatus>
CMakefind_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmakeQT += qml
继承自

QQuickItem

公共函数

virtual voidclassBegin() = 0
virtual voidcomponentComplete() = 0

详细描述

QQmlParserStatus 提供了一种机制,用于在某些关键点通知由 QQmlEngine 实例化的类的创建状态。

这个类常用于优化目的,因为它允许你在所有属性都设置在对象上之后再执行耗时的操作。例如,QML 的 Text 元素使用解析器状态来延迟文本布局,直到所有属性都已设置(我们不想在 text 被分配时布局,然后在 font 被分配时重新布局,当 width 被分配时再次布局,等等)。

请注意,QQmlParserStatus 方法仅在类由 QQmlEngine 实例化时调用。如果您直接从 C++ 创建相同的类,则这些方法将不会自动调用。为了避免这个问题,建议从 classBegin 开始延迟操作,而不是从您类的初始创建开始。这仍然可以防止在 QML 初始绑定赋值时的多次评估,但不会延迟从 C++ 触发的操作。

要使用 QQmlParserStatus,您必须继承一个 QObject 派生类和 QQmlParserStatus,并使用 Q_INTERFACES() 宏。

class MyObject : public QObject, public QQmlParserStatus
{
    Q_OBJECT
    Q_INTERFACES(QQmlParserStatus)

public:
    MyObject(QObject *parent = nullptr);
    // ...
    void classBegin() override;
    void componentComplete() override;
};

成员函数文档

[纯虚] void QQmlParserStatus::classBegin()

在类创建后被调用,但在设置任何属性之前。

[纯虚] void QQmlParserStatus::componentComplete()

在导致此实例化的根组件完成后被调用。此时,所有静态值和绑定值都已分配给该类。

© 2024 Qt公司有限公司。本文件中包含的文档贡献享有各自所有者的版权。提供的文档根据自由软件基金会发布的GNU自由文档许可证第1.3版授予许可。