QQmlContext Class
QQmlContext クラスは、QML エンジン内のコンテキストを定義します。詳細...
Header: | #include <QQmlContext> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake: | QT += qml |
Inherits: | 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 Compilerや QML ドキュメントの読者には見えません。公開されるのは、QMLコンポーネントが想定している特定のC++コンテキストでインスタンス化された場合のみです。他の場所では、別のコンテキストデータが代わりに公開されるかもしれません。
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)
新しい QQmlContext をengine のルートコンテキスト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
URLsrc を、それを含むコンポーネントの 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コンポーネントに値を注入してはいけません。代わりにシングルトンか通常のオブジェクトプロパティを使用してください。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 ここで提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。