このページでは

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)
(since 6.12) void persistedStoreChanged(QRemoteObjectAbstractPersistedStore *persistedStore)
(since 6.12) void registryUrlChanged(const QUrl &registryUrl)
void remoteObjectAdded(const QRemoteObjectSourceLocation &loc)
void remoteObjectRemoved(const QRemoteObjectSourceLocation &loc)

再実装された保護関数

virtual void timerEvent(QTimerEvent *) override

詳細な説明

QRemoteObjectNode クラスは、QtRemoteObjects ネットワークへのエントリポイントを提供します。ネットワークは、2 つのノードからなる単純なものから、プロセスやデバイスからなる任意に複雑な集合まで、さまざまな形態をとることができます。

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

ノードは、connectToNode を使用して互いに直接接続することも、接続を簡略化するためにQRemoteObjectRegistry を使用することもできます。

QRemoteObjectRegistry は、Registry 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 型の入力を受け取り、このノードと目的のソースをホストするノードとの間の通信チャネルを確立する役割を担う std::function メソッドの typedef です。 一部の QIODevice タイプ(例: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)

Notifierシグナル:

void persistedStoreChanged(QRemoteObjectAbstractPersistedStore *persistedStore)

registryUrl : QUrl

このプロパティには、このノードで使用されているRegistry のアドレスが格納されます。

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

アクセス関数:

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

Notifierシグナル:

void registryUrlChanged(const QUrl &registryUrl)

メンバ関数のドキュメント

QRemoteObjectNode::QRemoteObjectNode(QObject *parent = nullptr)

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

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

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

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

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

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

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

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

ソースの `name` に対する `QRemoteObjectDynamicReplica ` を返します。

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 )にアクセスできる必要があります。これを可能にするのがaddClientSideConnection()の呼び出しであり、この呼び出しではioDevice が入力として渡されます。 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で生成された型をテンプレートパラメータとして受け取る)は、Remote Objectsネットワーク上のその型のすべてのインスタンスの名前の一覧を返します。たとえば、.repファイルにShapeクラスが定義されており、CircleクラスとSquareクラスがSource定義から継承されている場合、enableRemoting を使用することで、これらをRemote Objectsネットワーク上で共有することができます。

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

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

この関数は、QRemoteObjectNode::instances() をオーバーロードしています。

QRemoteObjectNode::ErrorCode QRemoteObjectNode::lastError() const

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

[signal, since 6.12] void QRemoteObjectNode::persistedStoreChanged(QRemoteObjectAbstractPersistedStore *persistedStore)

このシグナルは、persistedStore プロパティがpersistedStore に変更されたときに発火します。

注: プロパティ `persistedStore`の通知 シグナルです。

この関数は Qt 6.12 で導入されました。

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

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

このメソッドは、レジストリおよび 外部スキーマに関連しています。外部スキーマに対して std::function ハンドラを登録することで、取得したSourceが利用可能になったことがレジストリに通知された際に、登録されたメソッドが呼び出されます。この登録を行わない場合、QtRO は「組み込み」スキーマのみを処理することになります。

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

RemoteObjectSchemaHandlerも参照してください 。

const QRemoteObjectRegistry *QRemoteObjectNode::registry() const

NodeがRegistry機能を使用している場合は、そのQRemoteObjectRegistry へのポインタを返します。そうでない場合は、nullptr を返します。

[signal, since 6.12] void QRemoteObjectNode::registryUrlChanged(const QUrl &registryUrl)

このシグナルは、registryUrl プロパティがregistryUrl に変更されたときに発生します。

注: プロパティ `registryUrl`の通知 シグナルです。

この関数はQt 6.12で導入されました。

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

このシグナルは、新しいSourceオブジェクトがレジストリに追加されるたびに発火します。レジストリが設定されていない場合(つまり、connectToNode 経由で直接確立された接続上の Source の場合)、このシグナルは発火しません。loc パラメータには、追加された Source に関する情報(名前、タイプ、ホストノードのQUrl など)が含まれます。

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

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

このシグナルは、既知のSourceオブジェクトがレジストリから削除されるたびに発火します。レジストリが設定されていない場合(つまり、connectToNode 経由で直接確立された接続上の Sources の場合)、このシグナルは発火しません。loc パラメータには、削除された Source に関する情報(名前、タイプ、ホストノードの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 を返します。

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