QQmlEngine Class
QQmlEngine クラスは、QML コンポーネントをインスタンス化するための環境を提供します。詳細...
ヘッダ | #include <QQmlEngine> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Qml) target_link_libraries(mytarget PRIVATE Qt6::Qml) |
qmake: | QT += qml |
を継承する: | QJSEngine |
継承元: |
プロパティ
- offlineStoragePath : QString
パブリック機能
QQmlEngine(QObject *parent = nullptr) | |
virtual | ~QQmlEngine() override |
void | addImageProvider(const QString &providerId, QQmlImageProviderBase *provider) |
void | addImportPath(const QString &path) |
void | addPluginPath(const QString &path) |
void | addUrlInterceptor(QQmlAbstractUrlInterceptor *urlInterceptor) |
QUrl | baseUrl() const |
void | clearComponentCache() |
void | clearSingletons() |
QQmlImageProviderBase * | imageProvider(const QString &providerId) const |
QStringList | importPathList() const |
QQmlIncubationController * | incubationController() const |
QUrl | interceptUrl(const QUrl &url, QQmlAbstractUrlInterceptor::DataType type) const |
(since 6.6) void | markCurrentFunctionAsTranslationBinding() |
QNetworkAccessManager * | networkAccessManager() const |
QQmlNetworkAccessManagerFactory * | networkAccessManagerFactory() const |
QString | offlineStorageDatabaseFilePath(const QString &databaseName) const |
QString | offlineStoragePath() const |
bool | outputWarningsToStandardError() const |
QStringList | pluginPathList() const |
void | removeImageProvider(const QString &providerId) |
void | removeUrlInterceptor(QQmlAbstractUrlInterceptor *urlInterceptor) |
QQmlContext * | rootContext() const |
void | setBaseUrl(const QUrl &url) |
void | setImportPathList(const QStringList &paths) |
void | setIncubationController(QQmlIncubationController *controller) |
void | setNetworkAccessManagerFactory(QQmlNetworkAccessManagerFactory *factory) |
void | setOfflineStoragePath(const QString &dir) |
void | setOutputWarningsToStandardError(bool enabled) |
void | setPluginPathList(const QStringList &paths) |
T | singletonInstance(int qmlTypeId) |
(since 6.5) T | singletonInstance(QAnyStringView uri, QAnyStringView typeName) |
void | trimComponentCache() |
QList<QQmlAbstractUrlInterceptor *> | urlInterceptors() const |
パブリックスロット
void | retranslate() |
シグナル
void | exit(int retCode) |
(since 6.5) void | offlineStoragePathChanged() |
void | quit() |
void | warnings(const QList<QQmlError> &warnings) |
静的パブリックメンバ
QQmlContext * | contextForObject(const QObject *object) |
void | setContextForObject(QObject *object, QQmlContext *context) |
再実装された保護された関数
virtual bool | event(QEvent *e) override |
関連する非メンバー
QQmlContext * | qmlContext(const QObject *object) |
QQmlEngine * | qmlEngine(const QObject *object) |
マクロ
QML_NAMESPACE_EXTENDED(EXTENSION_NAMESPACE) |
詳細説明
QQmlEngine は、components と、そこから生成されたオブジェクトを管理し、バインディングや関数を実行するために使用されます。QQmlEngine はQJSEngine も継承しており、QML コンポーネントと JavaScript コードのシームレスな統合を可能にします。
QMLの各コンポーネントはQQmlContext の中にインスタンス化されます。 QMLではコンテキストは階層的に配置され、この階層構造はQQmlEngineによって管理されます。デフォルトでは、コンポーネントはroot context でインスタンス化されます。
QQmlComponent,QQmlContext,QML Global Object,QQmlApplicationEngineも参照してください 。
プロパティのドキュメント
offlineStoragePath : QString
このプロパティは、オフライン・ユーザ・データを格納するディレクトリを保持します。
SQL およびその他のオフライン・ストレージが置かれるディレクトリを返します。
openDatabaseSync()
で作成された SQL データベースはここに格納されます。
デフォルトはプラットフォーム標準のユーザアプリケーションデータディレクトリの QML/OfflineStorage。
このパスは現在ファイルシステム上に存在しない可能性があるので、この場所に 新しいファイルを作成したい場合は、まずこのパスを作成する必要があります -QDir::mkpath() を参照してください。
アクセス関数
QString | offlineStoragePath() const |
void | setOfflineStoragePath(const QString &dir) |
通知シグナル:
void | offlineStoragePathChanged() |
以下も参照のこと。 Qt Quick Local Storage QML Types.
メンバ関数ドキュメント
[explicit]
QQmlEngine::QQmlEngine(QObject *parent = nullptr)
与えられたparent で新しい QQmlEngine を作成します。
[override virtual noexcept]
QQmlEngine::~QQmlEngine()
QQmlEngine を破棄します。
このエンジンで作成されたQQmlContext はすべて無効になりますが、破棄はされません (QQmlEngine オブジェクトの親になっている場合を除く)。
JS エンジンのクリーンアップの詳細については ~QJSEngine() を参照してください。
void QQmlEngine::addImageProvider(const QString &providerId, QQmlImageProviderBase *provider)
image: urlスキームでリクエストされた画像に使うprovider を設定します。ホストはproviderId です。QQmlEngine はprovider の所有権を持ちます。
画像プロバイダは pixmap とスレッド画像リクエストのサポートを可能にします。画像プロバイダの実装と使い方の詳細については、QQuickImageProvider のドキュメントを参照してください。
QMLソースファイルを読み込む前に、必要な画像プロバイダをすべてエンジンに追加しておく必要があります。
removeImageProvider()、QQuickImageProvider 、QQmlImageProviderBaseも参照してください 。
void QQmlEngine::addImportPath(const QString &path)
URL ベースのディレクトリ構造で、エンジンがインストールされたモジュールを検索するディレクトリとしてpath を追加します。
path は、ローカルのファイルシステムのディレクトリ、Qt Resource のパス (:/imports
)、Qt Resource のurl (qrc:/imports
)、または URL です。
path は、インポートパスリストに追加される前に正規形に変換されます。
新しく追加されたpath は、importPathList() の最初になります。
setImportPathList()、QMLモジュール、QMLインポートパスも参照してください。
void QQmlEngine::addPluginPath(const QString &path)
qmldir
ファイルで参照される)インポートされたモジュールのネイティブプラグインを検索するディレクトリとしてpath を追加します。
デフォルトでは、リストには.
のみが含まれます。つまり、エンジンはqmldir
ファイル自体のディレクトリを検索します。
新しく追加されたpath は、pluginPathList() で最初に表示されます。
setPluginPathList()も参照してください 。
void QQmlEngine::addUrlInterceptor(QQmlAbstractUrlInterceptor *urlInterceptor)
QMLでURLを解決する際に使用するurlInterceptor 。これはスクリプトファイルやQMLタイプの読み込みに使われるURLにも適用されます。URL インターセプターはエンジンがファイルを読み込んでいる間は変更しないでください。複数の URL インターセプターが指定された場合は、URL ごとに追加された順番に呼び出されます。
QQmlEngine はインターセプターの所有権を持たず、削除もしません。
QUrl QQmlEngine::baseUrl() const
このエンジンのベース URL を返します。ベース URL は、相対 URL がQQmlComponent コンストラクタに渡された場合にのみ、コンポーネントを解決するために使用されます。
ベース URL が明示的に設定されていない場合、このメソッドはアプリケーションの現在の作業ディレクトリを返します。
setBaseUrl()も参照してください 。
void QQmlEngine::clearComponentCache()
エンジン内部のコンポーネント キャッシュをクリアします。
この関数は、エンジンによって以前にロードされたほとんどのコンポーネントのプロパティ メタデータを破棄します。これは、エンジンのコンポーネント キャッシュから参照されていないコンポーネントを削除することによって行われます。まだ参照されているコンポーネントを削除することはありません。
コンポーネントが参照されていない場合、この関数はエンジンを、読み込まれたコンポーネント データを含まない状態に戻します。これは、以前のコンポーネント セットの小さなサブセットを再ロードしたり、以前にロードされたコンポーネントの新しいバージョンをロードしたりするのに便利です。
コンポーネントキャッシュがクリアされると、新しいオブジェクトを作成する前にコンポーネントをロードする必要があります。
注意: QML コンポーネントから作成された既存のオブジェクトは、コンポーネントキャッシュをクリアしても、その型が保持されます。これにはシングルトンオブジェクトも含まれます。キャッシュをクリアした後、同じ QML コードからさらにオブジェクトを作成した場合、 新しいオブジェクトは古いオブジェクトとは異なる型になります。このような新しいオブジェクトを、キャッシュをクリアする前に作成されたオブジェクトに属する、宣言された型のプロパティに代入してもうまくいきません。
一般的な経験則として、コンポーネントキャッシュをクリアする際には、QML コンポーネントから作成されたオブジェクトが生きていないことを確認してください。
trimComponentCache() およびclearSingletons()も参照して ください。
void QQmlEngine::clearSingletons()
エンジンが所有するすべてのシングルトンをクリアします。
この関数はすべてのシングルトンインスタンスを削除し、その中からエンジンが所有する QObject を削除します。これはclearComponentCache() を呼び出す前に、 QML で作成されたオブジェクトが残っていないことを確認するのに便利です。
QObject ベースのシングルトンインスタンスを保持する QML プロパティは、 エンジンがそのシングルトンを所有している場合は null になり、所有していない場合はその値を保持します。既存の QML オブジェクトにアクセスしてもシングルトンは自動的に再作成されません。新しいコンポーネントがインスタンス化されたときのみ、 シングルトンは再作成されます。
clearComponentCache()も参照してください 。
[static]
QQmlContext *QQmlEngine::contextForObject(const QObject *object)
object のQQmlContext を返すか、コンテキストが設定されていない場合は nullptr を返す。
QQmlEngine がQObject をインスタンス化すると、内部コンテキストが自動的に割り当てられる。このような内部コンテキストは読み取り専用です。コンテキスト・プロパティを設定することはできません。
setContextForObject()、qmlContext()、qmlEngine()、QQmlContext::setContextProperty()も参照 。
[override virtual protected]
bool QQmlEngine::event(QEvent *e)
再インプリメント:QObject::event(QEvent *e).
[signal]
void QQmlEngine::exit(int retCode)
このシグナルは、エンジンによってロードされたQMLが、指定されたリターンコードretCode でイベントループを抜けたいときに発せられる。
quit()も参照してください 。
QQmlImageProviderBase *QQmlEngine::imageProvider(const QString &providerId) const
見つかればproviderId に設定されている画像プロバイダを返します。 見つからなければnullptr
を返します。
QQuickImageProviderも参照してください 。
QStringList QQmlEngine::importPathList() const
URL ベースのディレクトリ構造で、エンジンがインストールされているモジュー ルを検索するディレクトリのリストを返します。
例えば、/opt/MyApp/lib/imports
がパスの中にある場合、com.mycompany.Feature
をインポートした QML は、QQmlEngine で、そのモジュールが提供するコンポーネントを/opt/MyApp/lib/imports/com/mycompany/Feature/
で探すことになります。qmldir
ファイルは型バージョンマッピングや、場合によってはQML拡張プラグインを定義するために必要です。
デフォルトでは、このリストにはQMLインポートパスで述べたパスが含まれます。
addImportPath() およびsetImportPathList()も参照して ください。
QQmlIncubationController *QQmlEngine::incubationController() const
現在設定されている孵化コントローラを返すか、コントローラが設定されていない場合は0を返す。
setIncubationController()も参照 。
QUrl QQmlEngine::interceptUrl(const QUrl &url, QQmlAbstractUrlInterceptor::DataType type) const
現在の URL インターセプターを、与えられたtype の与えられたurl に対して実行し、その結果を返す。
[since 6.6]
void QQmlEngine::markCurrentFunctionAsTranslationBinding()
このメソッドがQMLのバインディングの一部である関数の内部で呼ばれた場合、そのバインディングは翻訳バインディングとして扱われます。
class I18nAwareClass : public QObject { //... QString text() const { if (auto engine = qmlEngine(this)) engine->markCurrentFunctionAsTranslationBinding(); return tr("Hello, world!"); } };
注意: この関数はqsTr関数に代わる独自の関数を提供したい場合に便利です。C++クラスから公開されるプロパティが言語変更時に確実に更新されるようにするには、LanguageChange
のイベントに反応させることをお勧めします。これは、クラスが非QMLコンテキストで使用される場合にも動作する、より一般的なメカニズムであり、オーバーヘッドが若干少なくなります。しかし、クラスがすでにQMLエンジンと密接に結びついている場合は、markCurrentFunctionAsTranslationBinding
を使ってもかまいません。詳細は動的な言語変更の準備を参照してください。
この関数は Qt 6.6 で導入されました。
QQmlEngine::retranslateも参照してください 。
QNetworkAccessManager *QQmlEngine::networkAccessManager() const
このエンジンがインスタンス化した QML タイプが使用できる共通のQNetworkAccessManager を返す。
QQmlNetworkAccessManagerFactory が設定され、QNetworkAccessManager がまだ作成されていない場合、QQmlNetworkAccessManagerFactory がQNetworkAccessManager の作成に使われる;そうでない場合、返されるQNetworkAccessManager にはプロキシもキャッシュも設定されない。
setNetworkAccessManagerFactory()も参照してください 。
QQmlNetworkAccessManagerFactory *QQmlEngine::networkAccessManagerFactory() const
現在のQQmlNetworkAccessManagerFactory を返す。
setNetworkAccessManagerFactory()も参照 。
QString QQmlEngine::offlineStorageDatabaseFilePath(const QString &databaseName) const
databaseName という識別子を持つLocal Storage データベースが存在する(または存在するであろう)ファイルパスを返します。
LocalStorage.openDatabaseSync()も参照してください 。
[signal, since 6.5]
void QQmlEngine::offlineStoragePathChanged()
このシグナルはofflineStoragePath が変更されたときに発行される。
注: offlineStoragePath プロパティ用のノーティファイアシグナルです。
この関数は Qt 6.5 で導入されました。
bool QQmlEngine::outputWarningsToStandardError() const
警告メッセージがwarnings() シグナルで出力されるだけでなく、標準エラー出力にも出力される場合はtrueを返し、そうでない場合はfalseを返す。
デフォルト値は true です。
setOutputWarningsToStandardError()も参照 。
QStringList QQmlEngine::pluginPathList() const
qmldir
ファイルで参照される)インポートされたモジュールのネイティブプラグインをエンジンが検索するディレクトリのリストを返します。
デフ ォル ト では、 こ の リ ス ト は.
のみを含んでい ます。 すなわち、 エ ン ジ ンはqmldir
フ ァ イ ルのデ ィ レ ク ト リ 自体を検索 し ます。
addPluginPath() およびsetPluginPathList()も参照してください 。
[signal]
void QQmlEngine::quit()
このシグナルはエンジンによってロードされたQMLが終了したいときに発せられる。
exit()も参照してください 。
void QQmlEngine::removeImageProvider(const QString &providerId)
providerId の画像プロバイダを削除します。
addImageProvider() およびQQuickImageProviderも参照してください 。
void QQmlEngine::removeUrlInterceptor(QQmlAbstractUrlInterceptor *urlInterceptor)
addUrlInterceptor を使用して追加されたurlInterceptor を削除してください。URL インターセプターは、エンジンがファイルをロードしている間は変更しないでください。
これはインターセプターを削除するのではなく、単にエンジンから削除するだけです。その後、同じエンジンや別のエンジンで再利用することができます。
[slot]
void QQmlEngine::retranslate()
翻訳用にマークされた文字列を使用するすべてのバインディング式をリフレッシュします。
この関数は、QCoreApplication::installTranslator で新しいトランスレータをインストールした後に呼び出して、ユーザーインターフェイスに最新の翻訳が表示されるようにします。
QQmlContext *QQmlEngine::rootContext() const
エンジンのルートコンテキストを返す。
ルートコンテキストはQQmlEngine によって自動的に生成されます。 エンジンによってインスタンス化されたすべての QML コンポーネントインスタンスが利用できるデータは、ルートコンテキストに置く必要があります。
コンポーネントインスタンスの一部だけが利用できる追加データは、ルートコンテキストの親コンテキストにあるサブコンテキストに追加する必要があります。
void QQmlEngine::setBaseUrl(const QUrl &url)
このエンジンのベース URL をurl に設定する。
baseUrl()も参照 。
[static]
void QQmlEngine::setContextForObject(QObject *object, QQmlContext *context)
object のQQmlContext をcontext に設定する。object がすでにコンテキストを持っている場合、警告は出力されるが、コンテキストは変更されない。
QQmlEngine がQObject をインスタンス化するとき、コンテキストは自動的に設定される。
contextForObject()も参照のこと 。
void QQmlEngine::setImportPathList(const QStringList &paths)
URL ベースのディレクトリ構造で、エンジンがインストールされたモジュールを検索するディレクトリのリストとしてpaths を設定します。
デフォルトでは、このリストにはQML Import Path で説明したパスが含まれます。
警告 setImportPathList を呼び出しても、デフォルトのインポートパスは保持されません。
importPathList() およびaddImportPath()も参照してください 。
void QQmlEngine::setIncubationController(QQmlIncubationController *controller)
エンジンのインキュベーションcontroller を設定します。エンジンはアクティブなコントローラを1つだけ持つことができ、そのコントローラのオーナーシップは取りません。
incubationController()も参照してください 。
void QQmlEngine::setNetworkAccessManagerFactory(QQmlNetworkAccessManagerFactory *factory)
QNetworkAccessManager の作成に使用するfactory を設定します。
QNetworkAccessManager はQMLによるすべてのネットワークアクセスに使われます。ファクトリーを実装することで、キャッシュ、プロキシ、クッキーに特化したカスタムの を作成することができます。QNetworkAccessManager
ファクトリーはエンジンを実行する前に設定する必要があります。
注意: QQmlEngine はファクトリーの所有権を持ちません。
networkAccessManagerFactory()も参照してください 。
void QQmlEngine::setOutputWarningsToStandardError(bool enabled)
警告メッセージを標準エラー出力するかどうかをenabled に設定します。
enabled が true の場合、QML が生成した警告メッセージはすべて stderr に出力され、warnings() シグナルによって出力されます。enabled が偽の場合、warnings() シグナルのみが出力されます。これにより、アプリケーション側で警告出力を処理することができます。
デフォルト値はtrueである。
outputWarningsToStandardError()も参照のこと 。
void QQmlEngine::setPluginPathList(const QStringList &paths)
paths に、 イ ン ポー ト さ れ る モ ジ ュ ール (qmldir
フ ァ イ ル内で参照 さ れ る ) のネ イ テ ィ ブプ ラ グ イ ン を検索す る デ ィ レ ク ト リ の リ ス ト を設定 し ます。
デフ ォル ト では、 こ の リ ス ト は.
のみを含んでい ます。 すなわち、 エ ン ジ ンはqmldir
フ ァ イ ルのデ ィ レ ク ト リ 自体を検索 し ます。
pluginPathList() およびaddPluginPath()も参照してください 。
template <typename T> T QQmlEngine::singletonInstance(int qmlTypeId)
qmlTypeId で登録されたシングルトン型のインスタンスを返す。
テンプレート引数Tは QJSValue 、またはQObject-派生型へのポインタであり、シングルトンがどのように登録されたかに依存する。Tのインスタンスがまだ作成されていない場合、今作成される。qmlTypeId が有効なシングルトンタイプを表していない場合、デフォルトで構築されたQJSValue かnullptr
が返されます。
QObject* 例
class MySingleton : public QObject { Q_OBJECT // Register as default constructed singleton. QML_ELEMENT QML_SINGLETON static int typeId; // ... }; MySingleton::typeId = qmlTypeId(...); // Retrieve as QObject* QQmlEngine engine; MySingleton* instance = engine.singletonInstance<MySingleton*>(MySingleton::typeId);
QJSValue 例
// Register with QJSValue callback int typeId = qmlRegisterSingletonType(...); // Retrieve as QJSValue QQmlEngine engine; QJSValue instance = engine.singletonInstance<QJSValue>(typeId);
例: 例: QMLの型IDはシングルトンクラスにstaticメンバとして格納することを推奨します。qmlTypeId() による検索はコストがかかります。
QML_SINGLETON,qmlRegisterSingletonType(),qmlTypeId()も参照して ください。
[since 6.5]
template <typename T> T QQmlEngine::singletonInstance(QAnyStringView uri, QAnyStringView typeName)
これはオーバーロードされた関数である。
uri で指定されたモジュールから、typeName というシングルトン型のインスタンスを返します。
このメソッドは、qmlTypeId を呼び出した後に id ベースの singletonInstance のオーバーロードを呼び出す代わりに使うことができる。シングルトンに繰り返しアクセスする必要がある場合は、typeIdをキャッシュすることで、type-id based overload 。
テンプレート引数Tは、QJSValue 、またはQObject-派生型へのポインタのいずれかであり、シングルトンがどのように登録されたかに依存する。Tのインスタンスがまだ作成されていない場合、今作成される。typeName が有効なシングルトン型を表していない場合、デフォルトで構築されたQJSValue かnullptr
が返されます。
QQmlEngine engine; MySingleton *singleton = engine.singletonInstance<MySingleton *>("mymodule", "MySingleton"); /
この関数は Qt 6.5 で導入されました。
QML_SINGLETON 、qmlRegisterSingletonType()、qmlTypeId()も参照してください 。
void QQmlEngine::trimComponentCache()
エンジン内部のコンポーネント キャッシュをトリムします。
この関数は、現在使用されていないロード済みコンポーネントのプロパティ メタデータを破棄します。
コンポーネント自体のインスタンス、そのコンポーネントを使用する他のコンポーネントのインスタンス、またはそれらのコンポーネントによってインスタンス化されたオブジェクトが存在する場合、コンポーネントは使用中であるとみなされます。
clearComponentCache()も参照のこと 。
QList<QQmlAbstractUrlInterceptor *> QQmlEngine::urlInterceptors() const
現在アクティブな URL インターセプターのリストを返します。
[signal]
void QQmlEngine::warnings(const QList<QQmlError> &warnings)
このシグナルはQMLによってwarnings 。
関連する非会員
QQmlContext *qmlContext(const QObject *object)
object に関連するQQmlContext があればそれを返す。これはQQmlEngine::contextForObject(オブジェクト) と同等である。
注釈 この関数を使用するには、#include <QtQml>
を追加します。
contextForObject() およびqmlEngine()も参照 。
QQmlEngine *qmlEngine(const QObject *object)
object に関連付けられたQQmlEngine があればそれを返す。これはQQmlEngine::contextForObject(object)->engine() と同等であるが、より効率的である。
注意: この関数を使用するには#include <QtQml>
を追加する。
contextForObject() およびqmlContext()も参照 。
マクロ・ドキュメント
QML_NAMESPACE_EXTENDED(EXTENSION_NAMESPACE)
QML_EXTENDED_NAMESPACE 、拡張されるのは名前空間であり、型ではないという区別があります。
QMLでさらに列挙を提供するための拡張として、EXTENSION_NAMESPACE を使用することを宣言します。これは拡張された名前空間がQML_ELEMENT またはQML_NAMED_ELEMENT() マクロを使用して QML に公開されている場合に有効になります。このためには、列挙がメタオブジェクトシステムに公開されている必要があります。
例えば、以下の C++ コードでは
namespace NS2 { Q_NAMESPACE enum class E2 { D = 3, E, F }; Q_ENUM_NS(E2) } namespace NS1 { Q_NAMESPACE QML_ELEMENT enum class E1 { A, B, C }; Q_ENUM_NS(E1) // Extends NS1 with NS2 QML_NAMESPACE_EXTENDED(NS2) }
名前空間NS1
はNS2
で拡張され、E2
列挙型は QML からNS1
で利用できるようになります。
Item { Component.onCompleted: console.log(NS1.E1.A, NS1.E2.D) }
注: EXTENSION_NAMESPACE はQObject や QGadget になることもできます。その場合、QML_EXTENDED とは対照的に、 はメソッドやプロパティも公開しますが、公開されるのは列挙のみです。
EXTENSION_NAMESPACE つまり、Q_NAMESPACE マクロを含む名前空間か、QObject/QGadgetでなければなりません。
注意 : 既に名前空間内にいる場合でも、クラス名は完全修飾する必要があります。
QML_EXTENDED_NAMESPACE(),QML_ELEMENT,QML_NAMED_ELEMENT(),QML_EXTENDED(),拡張オブジェクトの登録,Q_ENUM, およびQ_ENUM_NSも参照のこと 。
© 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.