はじめにQt Remote Objects
はじめに
Qt Remote Objects モジュールは、プロセスとデバイス間で Qt API を共有する簡単な方法を提供します。そのためには、プロセスとデバイスの間にデータ・チャネルが必要です。このデータチャネルを確立するには、まずQRemoteObjectNode が必要です。
QtROでは、ノードは通信のエンドポイントです。リモート・オブジェクト・ネットワークでは、プロセスであれデバイスであれ、各参加者が独自のノードを必要とする。QtROはピアツーピアのネットワークであり、接続されたノードがネットワークのリンクとなる。
ノードはそれだけではあまり役に立ちません。しかし、QObject クラスをノードに追加して共有することで、その価値が生まれます。そして、どのピアノードもホストノード(共有するノード)から共有オブジェクトのコピーやインスタンスを要求することができます。
通常のクラスインスタンス(独立したプロパティとシグナル発信を持つ)を使用する場合とは異なり、QtROは共有オブジェクトへの変更を、そのコピーすべてに自動的に同期させます。いくつかの例外を除き、これらのコピーは元のオブジェクトと同じ Qt API を持ち、元のオブジェクトが利用可能であるかのように使用することができます。
QtROでは、オリジナルのオブジェクトをソースと呼びます。これは完全に実装されたC++クラスで、必要な機能を提供するために必要なビジネスロジックを備えています。このオブジェクトのコピーをレプリカと呼びます。代わりにノードからインスタンスをリクエストします。レプリカを使用するためには、シグナルを自分のスロットに接続するなどのコードが必要ですが、内部動作を実装する必要はありません。
ソースは異なるプロセス、あるいは異なるデバイス上にある可能性があるため、QtROでは、プロセス間通信(IPC)なしで開発する場合には通常遭遇しないような、考慮しなければならない要素があります。具体的には、プロセスやデバイスが存在しない場合はどうなるのでしょうか?そこで、Replica APIに追加された機能です:
- initialized() シグナルは、レプリカが QtRO ネットワークからソースの状態を受信すると発行されます。
- isReplicaValid プロパティとstateChanged() シグナルは、接続が切れた場合に警告を発します。
QtRO上で共有されるオブジェクトは、すべての通信にノード間のリンク(コンジット)を使用します。QObject を共有したい場合は、他のノードが接続できる URL を持つホストノードを作成する必要があります。レジストリを使用して接続を容易にすることもできますが、ソースを共有するノードはホストノードである必要があります。各共有オブジェクトには名前(QString )が与えられ、QtROネットワーク上で識別するために使用されます。
実装
リモートオブジェクトの使い方を説明するために、ソース側では以下のことが必要です:
- 他のノードにレプリケートされるソースオブジェクトを、repc(Qt Remote Objects Compiler)の使用有無にかかわらず作成します。
- オプションとして、レジストリを作成する。そうでない場合は、直接接続を使用します。
- ソース・オブジェクトを共有できるようにホスト・ノードを作成します。
- ノードのenableRemoting() 関数を呼び出して、ソース・オブジェクトを共有します。
レプリカ側では、以下を行う必要がある:
- オプションで、repc を使用してプロジェクトのReplicaヘッダーを生成します。
- ソース・ホスト・ノードと接続するノードを作成します。
- ノードのacquire() 関数を呼び出して、レプリカへのポインタを作成します。
以下の例では、repc でコンパイルされた静的オブジェクトと動的なソース・オブジェクトの両方を示します。さらに、直接接続と、ノード間でレジストリを使用する接続も示します。
© 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.