QQmlParserStatus Class

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

Header: #include <QQmlParserStatus>
CMake: find_package(Qt6 REQUIRED COMPONENTS Qml)
target_link_libraries(mytarget PRIVATE Qt6::Qml)
qmake: QT += qml
Inherited By:

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()

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

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します ここで提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。