QRemoteObjectNode Class

Qt Remote Objects ネットワーク上のノード。詳細...

ヘッダー #include <QRemoteObjectNode>
CMake: find_package(Qt6 REQUIRED COMPONENTS RemoteObjects)
target_link_libraries(mytarget PRIVATE Qt6::RemoteObjects)
qmake QT += remoteobjects
QML で Node
を継承: QObject
継承元:

QRemoteObjectHostBase

パブリックな型

enum ErrorCode { NoError, RegistryNotAcquired, RegistryAlreadyHosted, NodeIsNoServer, ServerAlreadyCreated, …, SocketAccessError }
RemoteObjectSchemaHandler

プロパティ

パブリック機能

QRemoteObjectNode(QObject *parent = nullptr)
QRemoteObjectNode(const QUrl &registryAddress, QObject *parent = nullptr)
ObjectType *acquire(const QString &name = QString())
QRemoteObjectDynamicReplica *acquireDynamic(const QString &name)
QAbstractItemModelReplica *acquireModel(const QString &name, QtRemoteObjects::InitialAction action = QtRemoteObjects::FetchRootSize, const QList<int> &rolesHint = {})
void addClientSideConnection(QIODevice *ioDevice)
bool connectToNode(const QUrl &address)
int heartbeatInterval() const
QStringList instances() const
QStringList instances(QStringView typeName) const
QRemoteObjectNode::ErrorCode lastError() const
QRemoteObjectAbstractPersistedStore *persistedStore() const
void registerExternalSchema(const QString &schema, QRemoteObjectNode::RemoteObjectSchemaHandler handler)
const QRemoteObjectRegistry *registry() const
QUrl registryUrl() const
void setHeartbeatInterval(int interval)
virtual void setName(const QString &name)
void setPersistedStore(QRemoteObjectAbstractPersistedStore *persistedStore)
virtual bool setRegistryUrl(const QUrl &registryAddress)
bool waitForRegistry(int timeout = 30000)

シグナル

void heartbeatIntervalChanged(int heartbeatInterval)
void remoteObjectAdded(const QRemoteObjectSourceLocation &loc)
void remoteObjectRemoved(const QRemoteObjectSourceLocation &loc)

再実装された保護された関数

virtual void timerEvent(QTimerEvent *) override

詳細説明

QRemoteObjectNodeクラスは、QtRemoteObjects ネットワークへのエントリーポイントを提供します。ネットワークは、2つのノードのような単純なものから、プロセスやデバイスの任意に複雑なセットまであります。

QRemoteObjectNodeは、他のノードが接続できるURLを持たないため、レプリカの取得のみが可能です。ソースオブジェクトを共有することはできません(共有できるのはQRemoteObjectHostQRemoteObjectRegistryHost Node のみ)。

ノードは、connectToNode を使用して直接接続することもできますし、QRemoteObjectRegistry を使用して接続を簡素化することもできます。

QRemoteObjectRegistry は、レジストリ URL に接続するすべてのノードが利用できる特別なレプリカです。これは、ネットワーク上のすべてのQRemoteObjectSourceオブジェクトへの接続方法を知っています。

QRemoteObjectHost およびQRemoteObjectRegistryHostも参照してください

メンバ型ドキュメント

enum QRemoteObjectNode::ErrorCode

この列挙型は、QRemoteObjectNode エラーに関連するさまざまなエラーコードを指定する:

定数説明
QRemoteObjectNode::NoError0エラーなし。
QRemoteObjectNode::RegistryNotAcquired1レジストリを取得できませんでした。
QRemoteObjectNode::RegistryAlreadyHosted2レジストリは既に定義されており、ソースをホストしています。
QRemoteObjectNode::NodeIsNoServer3指定されたQRemoteObjectNode はホスト・ノードではありません。
QRemoteObjectNode::ServerAlreadyCreated4ホスト・ノードは既に初期化されています。
QRemoteObjectNode::UnintendedRegistryHosting5ホストQRemoteObjectNode を作成し、それ自身をレジストリとして接続しようとしました。
QRemoteObjectNode::OperationNotValidOnClientNode6試行された操作は、クライアントQRemoteObjectNode では無効です。
QRemoteObjectNode::SourceNotRegistered7指定された QRemoteObjectSource はこのノードに登録されていません。
QRemoteObjectNode::MissingObjectName8指定されたQObject にはobjectName() が設定されていません。
QRemoteObjectNode::HostUrlInvalid9指定された url に無効なスキームまたは認識できないスキームがあります。
QRemoteObjectNode::ProtocolMismatch10クライアントとサーバーのプロトコルのバージョンが異なります。
QRemoteObjectNode::ListenFailed11指定されたホスト・ポートをリッスンできません。
QRemoteObjectNode::SocketAccessError12クライアントがサーバへの接続を許可されていません。QRemoteObjectHost::setLocalServerOptions が適切に設定されていることを確認してください。

QRemoteObjectNode::RemoteObjectSchemaHandler

std::function メソッドの型定義は、QUrl 入力を受け取り、このノードと目的のSource をホストするノードとの間の通信チャネルを作成する役割を担います。いくつかのタイプの QIODevices(例えば、QSslSocket )は、デバイスが使用できるようになるまでに追加のステップを必要とするため、このメソッドは、接続が完全に確立されると、addClientSideConnection を呼び出す責任を負います。

プロパティ・ドキュメンテーション

heartbeatInterval : int

ms単位のハートビート間隔。

ハートビート(ソケット接続にのみ有効)は、接続ノードに定期的にメッセージを送信し、接続が切断されたかどうかを検出します。Qt Remote Objects 、接続の切断を検出すると自動的に再接続を試みます。この関数は、クライアントがデータを送信しようとしたときにのみサーバが利用できないことを検出するため、この検出を支援することができます。

値を0 (デフォルト)に設定すると、ハートビートが無効になる。

アクセス関数:

int heartbeatInterval() const
void setHeartbeatInterval(int interval)

通知シグナル:

void heartbeatIntervalChanged(int heartbeatInterval)

persistedStore : QRemoteObjectAbstractPersistedStore*

ノードにQRemoteObjectAbstractPersistedStore インスタンスを設定できるようにする。

PERSISTED 特性を持つレプリカのPROPメンバが、レプリカが削除されたときに現在の値を保存し、次にレプリカが起動されたときに保存された値を復元できるようにします。

永続性がどこでどのように処理されるかを制御するために、QRemoteObjectAbstractPersistedStore クラスの実装が必要です。

アクセス関数:

QRemoteObjectAbstractPersistedStore *persistedStore() const
void setPersistedStore(QRemoteObjectAbstractPersistedStore *persistedStore)

registryUrl : QUrl

このプロパティは、このノードが使用するRegistry のアドレスを保持する。

使用中のレジストリがない場合は、空のQUrl となります。

アクセス関数:

QUrl registryUrl() const
virtual bool setRegistryUrl(const QUrl &registryAddress)

メンバ関数ドキュメント

QRemoteObjectNode::QRemoteObjectNode(QObject *parent = nullptr)

与えられたparent を持つ QRemoteObjectNode のデフォルトコンストラクタ。この方法で構築された Node は接続できないため、ネットワーク上に Source オブジェクトを公開できません。また、setRegistryUrl を使用して手動で設定しない限り、QRemoteObjectRegistry も含まれません。

connectToNode およびsetRegistryUrlも参照してください

QRemoteObjectNode::QRemoteObjectNode(const QUrl &registryAddress, QObject *parent = nullptr)

QRemoteObjectRegistry} に接続された QRemoteObjectNode。{レジストリ}に接続されています。このように構築されたノードは接続することができないため、ネットワーク上にソース・ オブジェクトを公開することはできません。他の(ホスト)ノードの検索と接続は、registryAddress で指定されているQRemoteObjectRegistry によって処理されます。

connectToNodesetRegistryUrlQRemoteObjectHostQRemoteObjectRegistryHostも参照して ください。

template <typename ObjectType> ObjectType *QRemoteObjectNode::acquire(const QString &name = QString())

ObjectType 型(テンプレート・パラメータであり、QRemoteObjectReplica を継承する必要がある)の Replica へのポインタを返します。つまり、テンプレート・パラメータはrepc が生成した型でなければなりません。name パラメータを使用して、QRemoteObjectHost::enableRemoting() 呼び出し時にオブジェクトに与えられたname を指定できます。

QRemoteObjectDynamicReplica *QRemoteObjectNode::acquireDynamic(const QString &name)

ソースnameQRemoteObjectDynamicReplica を返す。

QAbstractItemModelReplica *QRemoteObjectNode::acquireModel(const QString &name, QtRemoteObjects::InitialAction action = QtRemoteObjects::FetchRootSize, const QList<int> &rolesHint = {})

特にQAbstractItemModel から派生したReplicaへのポインタを返します。指定されたname は、モデルをネットワーク上に配置したenableRemoting と一致する名前と一致しなければなりません。action は、initialized シグナルが発信される前にモデルがデータをフェッチすべきかどうかを指定します。これがQtRemoteObjects::PrefetchData に設定されている場合、rolesHint のロールのデータがプリフェッチされます。rolesHint が空の場合、Sourceが公開するすべてのロールのデータがプリフェッチされます。

返されるモデルは、Source で初期化されるまでは空です。

void QRemoteObjectNode::addClientSideConnection(QIODevice *ioDevice)

外部 QIODevice 上でQRemoteObjectNode::acquire()Replicaオブジェクトを使用するには、Qt Remote Objects 、それぞれのノード間の通信チャネル(QIODevice )にアクセスする必要があります。これを可能にするのは、ioDevice を入力とする addClientSideConnection() 呼び出しです。addClientSideConnection を呼び出さずにacquire() を呼び出しても動作しますが、ホスト・ノードへの接続が提供されないと、ノードはレプリカを初期化できません。

QRemoteObjectHostBase::addHostSideConnectionも参照してください

[invokable] bool QRemoteObjectNode::connectToNode(const QUrl &address)

クライアントノードをaddress のホストノードに接続します。

接続は、ホストノードが削除されるか、ネットワーク経由でアクセスできなくなるまで有効です。

クライアントがホストに接続されると、対応するソースがリモート接続されている場合、有効なレプリカを取得できます。

成功した場合はtrue を返し、そうでない場合はfalse を返します (通常、認識できない URL、または既に接続されているアドレスへの接続)。

注意: この関数はメタオブジェクトシステムやQMLから呼び出すことができます。Q_INVOKABLE を参照してください。

template <typename T> QStringList QRemoteObjectNode::instances() const

このテンプレート化された関数(repc で生成された型をテンプレート・パラメータとして取る)は、リモート・オブジェクト・ネットワーク上のその型のすべてのインスタンスの名前のリストを返します。例えば、.rep ファイルに Shape クラスが定義されており、Circle と Square クラスが Source 定義を継承している場合、enableRemoting を使用してリモートオブジェクトネットワーク上で共有することができます。

Square square;
Circle circle;
myHost.enableRemoting(&square, "Square");
myHost.enableRemoting(&circle, "Circle");

その後、インスタンスを使用して、利用可能な Shape のインスタンスを検索できます。

QStringList instances = clientNode.instances<Shape>();
// will return a QStringList containing "Circle" and "Square"
auto instance1 = clientNode.acquire<Shape>("Circle");
auto instance2 = clientNode.acquire<Shape>("Square");
...

QStringList QRemoteObjectNode::instances(QStringView typeName) const

この関数は instances() をオーバーロードしたものです。

この便利な関数は、テンプレート化されたバージョンと同じ結果を提供しますが、クラス・タイプから派生するのではなく、ソース・クラスの名前をパラメータとして受け取ります (typeName)。

QRemoteObjectNode::ErrorCode QRemoteObjectNode::lastError() const

最後に設定されたエラーを返します。

void QRemoteObjectNode::registerExternalSchema(const QString &schema, QRemoteObjectNode::RemoteObjectSchemaHandler handler)

外部から提供されたスキーマを処理するカスタム・メソッドを提供する。

このメソッドは、レジストリおよび外部スキーマに関連付けられています。外部スキーマ用の std::function ハンドラを登録することで、取得したソースが利用可能になったことがレジストリに通知されたときに、登録したメソッドが呼び出されるようになります。この登録がなければ、QtRO は「ビルトイン」スキーマしか扱えません。

schema の {QUrl::schema()} を持つ新しい (まだ接続されていない) Node 上のSourceオブジェクトをレジストリが検出すると、提供されたメソッドhandler が呼び出されます。QRemoteObjectNode::RemoteObjectSchemaHandler 型のhandler は、Sourceを提供する Node のQUrl を入力パラメータとして取得し、通信チャネル (QIODevice のようなもの) を確立してaddClientSideConnection を呼び出す役割を果たします。

RemoteObjectSchemaHandlerも参照

const QRemoteObjectRegistry *QRemoteObjectNode::registry() const

ノードがレジストリ機能を使用している場合は、ノードのQRemoteObjectRegistry へのポインタを返します。そうでない場合は、nullptr を返します。

[signal] void QRemoteObjectNode::remoteObjectAdded(const QRemoteObjectSourceLocation &loc)

このシグナルは、新しいソースオブジェクトがレジストリに追加されるたびに発行される。レジストリが設定されていない場合(つまり、connectToNode を介して直接接続されたソース)、このシグナルは発行されない。loc パラメータには、追加されたソースに関する情報(名前、タイプ、ホスティング ノードのQUrl など)が含まれます。

remoteObjectRemoved() およびinstances()も参照してください

[signal] void QRemoteObjectNode::remoteObjectRemoved(const QRemoteObjectSourceLocation &loc)

このシグナルは、既知のソースオブジェクトがレジストリから削除されるたびに発行される。レジストリが設定されていない場合(つまり、connectToNode を介して直接接続されたソース)、このシグナルは発行されません。loc パラメータには、名前、タイプ、ホスティングしているノードのQUrl など、削除されたソースに関する情報が含まれます。

remoteObjectAdded およびinstancesも参照して ください。

[virtual] void QRemoteObjectNode::setName(const QString &name)

このノードの内部名としてname を設定します。これは、ロギングの一部として出力されます(有効な場合)。これは主に、複数のノードからのログデータをマージする場合に便利です。

[override virtual protected] void QRemoteObjectNode::timerEvent(QTimerEvent *)

再実装:QObject::timerEvent(QTimerEvent *event).

bool QRemoteObjectNode::waitForRegistry(int timeout = 30000)

このノードのレジストリが初期化されるか、timeout (ミリ秒単位)が経過するまでブロックする。復帰時にレジストリが正常に初期化されていればtrue を返し、そうでなければfalse を返す。

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