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 |
QObject * | contextObject() const |
QVariant | contextProperty(const QString &name) const |
QQmlEngine * | engine() 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 コンポーネントにデータを公開することもできます。このようなデータは、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)
新しい QQmlContext を、与えられたparentContext とQObject parent で作成します。
QQmlContext::QQmlContext(QQmlEngine *engine, QObject *parent = nullptr)
engine'のルートコンテキストの子として新しいQQmlContextを作成し、QObject parent 。
[override virtual noexcept]
QQmlContext::~QQmlContext()
QQmlContext を破棄する。
このコンテキストに依存している式やサブコンテキストはすべて無効になるが、破棄はされない(QQmlContext オブジェクトの親になっている場合を除く)。
QUrl QQmlContext::baseUrl() const
コンポーネントのベース URL、あるいは何も設定されていない場合は 含むコンポーネントを返します。
setBaseUrl()も参照ください 。
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
を返す。
bool QQmlContext::isValid() const
コンテキストが有効かどうかを返します。
有効であるためには、コンテキストはエンジンを持たなければならず、contextObject() がある場合はそれが削除されていなければなりません。
QString QQmlContext::nameForObject(const QObject *object) const
このコンテキストにおけるobject の名前を返します。object の名前がコンテキストにない場合は空文字列を返します。オブジェクトの名前は、setContextProperty()、コンテキストオブジェクトのプロパティ、QMLで作成されたコンテキストの場合はidsで指定します。
オブジェクトに複数の名前がある場合は、最初の名前が返されます。
contextProperty() とは対照的に、このメソッドはコンテキスト階層を走査しません。現在のコンテキストにその名前がない場合は、空の文字列が返されます。
contextProperty() およびobjectForName()も参照してください 。
[since 6.2]
QObject *QQmlContext::objectForName(const QString &name) const
このコンテキストで指定されたname のオブジェクトを返す。name がコンテキストにない場合、またはname に関連付けられた値がQObject でない場合は nullptr を返します。 オブジェクトの名前はsetContextProperty() で指定するか、コンテキストオブジェクトのプロパティとして指定するか、QML で作成されたコンテキストの場合は ids で指定します。contextProperty() とは対照的に、このメソッドはコンテキスト階層を走査しません。現在のコンテキストで名前が見つからない場合、nullptr が返されます。
この関数は Qt 6.2 で導入されました。
contextProperty() およびnameForObject()も参照してください 。
QQmlContext *QQmlContext::parentContext() const
コンテキストの親QQmlContext を返すか、このコンテキストに親がないか、親が破棄された場合はnullptr
を返す。
QUrl QQmlContext::resolvedUrl(const QUrl &src) const
src の URL を、それを含むコンポーネントの URL からの相対 URL に解決する。
QQmlEngine::baseUrl() およびsetBaseUrl()も参照 。
void QQmlContext::setBaseUrl(const QUrl &baseUrl)
baseUrl への相対参照に使用する urlresolvedUrl() を明示的に設定します。
この関数をコールすると、デフォルトで使用されるコンポーネントの 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コンポーネントに値を注入してはいけません。代わりにシングルトンか通常のオブジェクトプロパティを使用してください。
© 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.