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 |
継承元: |
パブリックな型
enum | ErrorCode { NoError, RegistryNotAcquired, RegistryAlreadyHosted, NodeIsNoServer, ServerAlreadyCreated, …, SocketAccessError } |
RemoteObjectSchemaHandler |
プロパティ
- heartbeatInterval : int
- persistedStore : QRemoteObjectAbstractPersistedStore*
- registryUrl : QUrl
パブリック機能
QRemoteObjectNode(QObject *parent = nullptr) | |
QRemoteObjectNode(const QUrl ®istryAddress, 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 ®istryAddress) |
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を持たないため、レプリカの取得のみが可能です。ソースオブジェクトを共有することはできません(共有できるのはQRemoteObjectHost とQRemoteObjectRegistryHost Node のみ)。
ノードは、connectToNode を使用して直接接続することもできますし、QRemoteObjectRegistry を使用して接続を簡素化することもできます。
QRemoteObjectRegistry は、レジストリ URL に接続するすべてのノードが利用できる特別なレプリカです。これは、ネットワーク上のすべてのQRemoteObjectSourceオブジェクトへの接続方法を知っています。
QRemoteObjectHost およびQRemoteObjectRegistryHostも参照してください 。
メンバ型ドキュメント
enum QRemoteObjectNode::ErrorCode
この列挙型は、QRemoteObjectNode エラーに関連するさまざまなエラーコードを指定する:
定数 | 値 | 説明 |
---|---|---|
QRemoteObjectNode::NoError | 0 | エラーなし。 |
QRemoteObjectNode::RegistryNotAcquired | 1 | レジストリを取得できませんでした。 |
QRemoteObjectNode::RegistryAlreadyHosted | 2 | レジストリは既に定義されており、ソースをホストしています。 |
QRemoteObjectNode::NodeIsNoServer | 3 | 指定されたQRemoteObjectNode はホスト・ノードではありません。 |
QRemoteObjectNode::ServerAlreadyCreated | 4 | ホスト・ノードは既に初期化されています。 |
QRemoteObjectNode::UnintendedRegistryHosting | 5 | ホストQRemoteObjectNode を作成し、それ自身をレジストリとして接続しようとしました。 |
QRemoteObjectNode::OperationNotValidOnClientNode | 6 | 試行された操作は、クライアントQRemoteObjectNode では無効です。 |
QRemoteObjectNode::SourceNotRegistered | 7 | 指定された QRemoteObjectSource はこのノードに登録されていません。 |
QRemoteObjectNode::MissingObjectName | 8 | 指定されたQObject にはobjectName() が設定されていません。 |
QRemoteObjectNode::HostUrlInvalid | 9 | 指定された url に無効なスキームまたは認識できないスキームがあります。 |
QRemoteObjectNode::ProtocolMismatch | 10 | クライアントとサーバーのプロトコルのバージョンが異なります。 |
QRemoteObjectNode::ListenFailed | 11 | 指定されたホスト・ポートをリッスンできません。 |
QRemoteObjectNode::SocketAccessError | 12 | クライアントがサーバへの接続を許可されていません。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 ®istryAddress) |
メンバ関数ドキュメント
QRemoteObjectNode::QRemoteObjectNode(QObject *parent = nullptr)
与えられたparent を持つ QRemoteObjectNode のデフォルトコンストラクタ。この方法で構築された Node は接続できないため、ネットワーク上に Source オブジェクトを公開できません。また、setRegistryUrl を使用して手動で設定しない限り、QRemoteObjectRegistry も含まれません。
connectToNode およびsetRegistryUrlも参照してください 。
QRemoteObjectNode::QRemoteObjectNode(const QUrl ®istryAddress, QObject *parent = nullptr)
QRemoteObjectRegistry} に接続された QRemoteObjectNode。{レジストリ}に接続されています。このように構築されたノードは接続することができないため、ネットワーク上にソース・ オブジェクトを公開することはできません。他の(ホスト)ノードの検索と接続は、registryAddress で指定されているQRemoteObjectRegistry によって処理されます。
connectToNode 、setRegistryUrl 、QRemoteObjectHost 、QRemoteObjectRegistryHostも参照して ください。
template <typename ObjectType> ObjectType *QRemoteObjectNode::acquire(const QString &name = QString())
ObjectType 型(テンプレート・パラメータであり、QRemoteObjectReplica を継承する必要がある)の Replica へのポインタを返します。つまり、テンプレート・パラメータは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 )にアクセスする必要があります。これを可能にするのは、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.