このページでは

QQmlContext Class

QQmlContext クラスは、QML エンジン内のコンテキストを定義します。詳細...

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

パブリック型

struct PropertyPair

パブリック関数

QQmlContext(QQmlContext *parentContext, QObject *parent = nullptr)
QQmlContext(QQmlEngine *engine, QObject *parent = nullptr)
virtual ~QQmlContext() override
QUrl baseUrl() const
(since 6.11) QList<QQmlContext *> childContexts() const
QObject *contextObject() const
QVariant contextProperty(const QString &name) const
QQmlEngine *engine() const
(since 6.11) QObject *findObjectRecursively(const QString &id) const
(since 6.11) QList<QObject *> findObjectsRecursively(const QString &id) const
bool isValid() const
QString nameForObject(const QObject *object) const
(since 6.2) QObject *objectForName(const QString &name) const
QQmlContext *parentContext() const
QUrl resolvedUrl(const QUrl &src) const
void setBaseUrl(const QUrl &baseUrl)
void setContextObject(QObject *object)
void setContextProperties(const QList<QQmlContext::PropertyPair> &properties)
void setContextProperty(const QString &name, QObject *value)
void setContextProperty(const QString &name, const QVariant &value)

詳細な説明

コンテキストは、QMLドキュメント内でidによって識別されるオブジェクトを保持します。nameForObject()およびobjectForName()を使用して、それらを取得できます。

注: 生成した QQmlContext を削除するのは、生成者の責任です 。QQmlContext が不要になった場合は、明示的に破棄する必要があります。これを確実に行う最も簡単な方法は、QQmlContext に `parent` を指定することです。

コンテキストの階層構造

コンテキストは階層構造を形成します。この階層のルートは、QMLエンジンのroot context です。各QMLコンポーネントはインスタンス化される際に独自のコンテキストを作成し、一部のQML要素は自身のために追加のコンテキストを作成します。

コンテキスト内でインスタンス化されたQMLオブジェクトは、厳密にはそのコンテキストに所有されているわけではありませんが、そのバインディングは所有されています。コンテキストが破棄されると、未処理のQMLオブジェクトのプロパティバインディングの評価は停止します。

コンテキストのプロパティ

コンテキストは、QMLエンジンによってインスタンス化されたQMLコンポーネントに対してデータを公開することも可能です。このようなデータは、Qt Quick コンパイラを含むいかなるツールからも、また当該QMLドキュメントを将来読む読者からも見えません。このデータは、想定している特定のC++コンテキスト内でQMLコンポーネントがインスタンス化された場合にのみ公開されます。 それ以外の場所では、代わりに異なるコンテキストデータが公開される場合があります。

QMLコンポーネントにデータを公開するためにQMLコンテキストを使用する代わりに、データを保持するための追加のオブジェクトプロパティを作成するか、singletons を使用する必要があります。詳細な説明については、「C++の状態をQMLに公開する」を参照してください。

各QQmlContextには、QObject のプロパティとは区別される一連のプロパティが含まれており、これを使用することで、名前を指定してデータをコンテキストに明示的にバインドすることができます。コンテキストプロパティは、QQmlContext::setContextProperty()を呼び出すことで定義および更新できます。

大規模なデータセットのバインディングや管理を簡略化するために、QQmlContextにコンテキストオブジェクトを設定することができます。 コンテキストオブジェクトのすべてのプロパティは、あたかもQQmlContext::setContextProperty()の呼び出しを通じて個別に追加されたかのように、コンテキスト内で名前によって利用可能です。プロパティの値の変更は、そのプロパティのnotifyシグナルを通じて検出されます。コンテキストオブジェクトを設定することは、コンテキストプロパティの値を手動で追加・維持するよりも高速かつ簡単です。

QQmlContext::setContextProperty() によって明示的に追加されたすべてのプロパティは、コンテキストオブジェクトのプロパティよりも優先されます。

子コンテキストは親のコンテキストプロパティを継承します。子コンテキストが親にすでに存在するコンテキストプロパティを設定した場合、新しいコンテキストプロパティが親のものを上書きします。

警告: コンテキスト内でオブジェクトが作成された後にコンテキストオブジェクトを設定したり 、新しいコンテキストプロパティを追加したりすることは、負荷の高い操作です(実質的にすべてのバインディングの再評価を強制することになります)。したがって、コンテキストプロパティを使用する必要がある場合は、コンテキストを使用してオブジェクトを作成する前に、少なくともコンテキストの「セットアップ」を完了しておく必要があります。

「C++ 型の属性を QML に公開する」も参照してください 。

メンバ関数のドキュメント

QQmlContext::QQmlContext(QQmlContext *parentContext, QObject *parent = nullptr)

指定されたparentContext 、およびQObject parent を使用して、新しいQQmlContextを作成します。

QQmlContext::QQmlContext(QQmlEngine *engine, QObject *parent = nullptr)

engine のルートコンテキストの子として新しいQQmlContextを作成し、QObject parent に設定します。

[override virtual noexcept] QQmlContext::~QQmlContext()

QQmlContext を破棄します。

このコンテキストに依存する式やサブコンテキストはすべて無効化されますが、破棄されることはありません(QQmlContext オブジェクトの子として設定されていない限り)。

QUrl QQmlContext::baseUrl() const

コンポーネントのベースURLを返します。ベースURLが設定されていない場合は、そのコンポーネントを囲む親コンポーネントのURLを返します。

setBaseUrl()も参照してください 。

[since 6.11] QList<QQmlContext *> QQmlContext::childContexts() const

コンテキストの直下の子である QQmlContexts を返します。

この関数は Qt 6.11 で導入されました。

parentContext()、findObjectRecursively()、およびfindObjectsRecursively()も参照してください 。

QObject *QQmlContext::contextObject() const

コンテキストオブジェクトを返す。コンテキストオブジェクトが存在しない場合は、nullptr を返す。

setContextObject()も参照してください 。

QVariant QQmlContext::contextProperty(const QString &name) const

このコンテキストのname プロパティの値を、QVariant として返します。探しているプロパティが、現在のコンテキストでQML IDを使用して割り当てられたQObject であることが分かっている場合は、objectForName() の方が便利で高速です。objectForName() やnameForObject() とは対照的に、このメソッドはコンテキスト階層を辿り、現在のコンテキストでname が見つからない場合は親コンテキストを検索します。また、設定されているcontextObject() も考慮されます。

setContextProperty()、objectForName()、nameForObject()、およびcontextObject()も参照してください 。

QQmlEngine *QQmlContext::engine() const

コンテキストのQQmlEngine を返します。コンテキストにQQmlEngine が存在しない場合、またはQQmlEngine が破棄された場合は、nullptr を返します。

[since 6.11] QObject *QQmlContext::findObjectRecursively(const QString &id) const

このコンテキストとその子要素を再帰的に検索し、IDがid のオブジェクトを探します。該当するオブジェクトが見つかった場合は、そのオブジェクトを返します。見つからない場合は、nullptr を返します。

任意のコンテキスト内には、指定されたid を持つオブジェクトは 1 つしか存在しませんが、1 つのドキュメント内に、たとえばビューやデリゲートなどを通じて複数のコンテキストを作成することは可能です。それらの各コンテキストには、指定されたid を持つオブジェクトが含まれている可能性があります。ここでは、最初に見つかったもののみが返されます。検索は幅優先探索(BFS)を用いて行われます。

この関数はQt 6.11で導入されました。

findObjectsRecursively()、objectForName()、およびchildContexts()も参照してください 。

[since 6.11] QList<QObject *> QQmlContext::findObjectsRecursively(const QString &id) const

このコンテキストとその子要素を再帰的に検索し、IDがid のオブジェクトを探します。これらのオブジェクトのリストを返します。

任意のコンテキスト内には、指定されたid を持つオブジェクトは1つしか存在できませんが、1つのドキュメント内に、たとえばビューやデリゲートなどを通じて複数のコンテキストを作成することは可能です。それらの各コンテキストには、指定されたid を持つオブジェクトが含まれる可能性があります。

この関数は Qt 6.11 で導入されました。

findObjectRecursively()、objectForName()、およびchildContexts()も参照してください 。

bool QQmlContext::isValid() const

コンテキストが有効かどうかを返します。

コンテキストが有効であるためには、エンジンが存在している必要があり、また、contextObject() が存在する場合、それが削除されていない必要があります。

QString QQmlContext::nameForObject(const QObject *object) const

このコンテキストにおけるobject の名前を返します。object がコンテキスト内で名前付けされていない場合は、空の文字列を返します。オブジェクトの名前付けは、setContextProperty() によって行われるほか、コンテキストオブジェクトのプロパティとして、あるいはQMLで作成されたコンテキストの場合はIDによって行われます。

オブジェクトに複数の名前がある場合は、最初の名前が返されます。

contextProperty() とは対照的に、このメソッドはコンテキスト階層をトラバースしません。現在のコンテキストで名前が見つからない場合は、空の文字列が返されます。

contextProperty() およびobjectForName()も参照してください 。

[since 6.2] QObject *QQmlContext::objectForName(const QString &name) const

このコンテキスト内で、指定されたname に対応するオブジェクトを返します。コンテキスト内でname が利用できない場合、またはname に関連付けられた値がQObject でない場合は、nullptrを返します。オブジェクトの名前は、setContextProperty()によって指定されるか、コンテキストオブジェクトのプロパティとして指定されるか、QMLで作成されたコンテキストの場合はIDによって指定されます。contextProperty()とは対照的に、このメソッドはコンテキスト階層を走査しません。現在のコンテキスト内で名前が見つからない場合、nullptrが返されます。

この関数は Qt 6.2 で導入されました。

contextProperty() およびnameForObject()も参照してください 。

QQmlContext *QQmlContext::parentContext() const

コンテキストの親であるQQmlContext を返します。ただし、このコンテキストに親が存在しない場合、または親が破棄されている場合は、nullptr を返します。

QUrl QQmlContext::resolvedUrl(const QUrl &src) const

URLsrc を、それを含むコンポーネントの URL を基準として解決します。

QQmlEngine::baseUrl() およびsetBaseUrl()も参照してください 。

void QQmlContext::setBaseUrl(const QUrl &baseUrl)

resolvedUrl() がbaseUrl への相対参照に使用する URL を明示的に設定します。

この関数を呼び出すと、デフォルトで使用される親コンポーネントの URL が上書きされます。

baseUrl() およびresolvedUrl()も参照してください 。

void QQmlContext::setContextObject(QObject *object)

コンテキストobject を設定します。

注: QMLコンポーネントに値を注入するためにコンテキストオブジェクトを使用しないでください 。代わりに、シングルトンまたは通常のオブジェクトプロパティを使用してください。

関連項目: contextObject().

void QQmlContext::setContextProperties(const QList<QQmlContext::PropertyPair> &properties)

このコンテキストに対して、properties をまとめて設定します。

すべてのプロパティを一括で設定することで、不要な式のリフレッシュを回避できるため、個々のプロパティごとに `setContextProperty()` を呼び出すよりも、この方法をお勧めします。

注: QMLコンポーネントに値を注入するためにコンテキストプロパティを使用しないでください 。代わりに、シングルトンまたは通常のオブジェクトプロパティを使用してください。

QQmlContext::setContextProperty()も参照してください 。

void QQmlContext::setContextProperty(const QString &name, QObject *value)

このコンテキストのname プロパティのvalue を設定します。

QQmlContext value の所有権を取得しません。

注: QMLコンポーネントに値を注入するためにコンテキストプロパティを使用しないでください 。代わりに、シングルトンまたは通常のオブジェクトプロパティを使用してください。

contextProperty()も参照してください 。

void QQmlContext::setContextProperty(const QString &name, const QVariant &value)

このコンテキストのname プロパティにvalue を設定します。

注: QMLコンポーネントに値を注入するためにコンテキストプロパティを使用しないでください 。代わりに、シングルトンまたは通常のオブジェクトプロパティを使用してください。

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