QRemoteObjectNode Class

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

Header: #include <QRemoteObjectNode>
CMake: find_package(Qt6 REQUIRED COMPONENTS RemoteObjects)
target_link_libraries(mytarget PRIVATE Qt6::RemoteObjects)
qmake: QT += remoteobjects
In QML: Node
Inherits: QObject
Inherited By:

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

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

プロパティの説明

heartbeatInterval : int

ハートビート間隔(ms)。

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

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 は接続することができないため、ネットワーク上にソース・オブジェクトを公開することはできません。また、setRegistryUrl を使用して手動で設定しない限り、QRemoteObjectRegistry も含まれません。

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

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

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

connectToNodesetRegistryUrlQRemoteObjectHostQRemoteObjectRegistryHostも参照して ください。

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

ObjectType 型の Replica へのポインタを返します(これはテンプレート・パラメータであり、QRemoteObjectReplica を継承する必要があります)。つまり、テンプレート・パラメータは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");

次に、instance を使用して 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() をオーバーロードします。

この便利な関数は、テンプレート化されたバージョンと同じ結果を提供しますが、クラス型から派生するのではなく、Sourceクラスの名前をパラメータとして受け取ります (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)

このシグナルは、既知のSourceオブジェクトがレジストリから削除されるたびに発行されます。レジストリが設定されていない場合、このシグナルは発行されません(つまり、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 を返します。

©2024 The Qt Company Ltd. 本文書に含まれるドキュメントのコントリビューションの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。