QQmlParserStatus Class

QQmlParserStatusクラスは、QMLパーサーの状態の更新を提供します。詳細...

ヘッダ #include <QQmlParserStatus>
CMake: find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake: QT += qml
継承元:

QQuickItem

パブリック関数

virtual void classBegin() = 0
virtual void componentComplete() = 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;
};

メンバ関数ドキュメント

[pure virtual] void QQmlParserStatus::classBegin()

クラス作成後、プロパティが設定される前に呼び出される。

[pure virtual] void QQmlParserStatus::componentComplete()

このインスタンス化の原因となったルート・コンポーネントが構築を完了した後に呼び出されます。この時点で、すべての静的値とバインディング値がクラスに割り当てられています。

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