このページでは

はじめにQt Remote Objects

はじめに

Qt Remote Objects モジュールは、プロセス間およびデバイス間でQt APIを簡単に共有する手段を提供します。これを機能させるには、プロセスとデバイス間のデータチャネルが必要です。このデータチャネルを確立するには、まずQRemoteObjectNode が必要です。

QtROにおいて、ノードは通信のためのエンドポイントです。リモートオブジェクトネットワークでは、プロセスであれデバイスであれ、各参加者に独自のノードが必要です。QtROはピアツーピアネットワークであり、接続されたノードがネットワークのリンクとなります。

ノード自体は、それだけではあまり役に立ちません。しかし、共有するためのQObject クラスをノードに追加することで、その価値が発揮されます。そうすることで、どのピアノードも、ホストノード(つまり、そのオブジェクトを共有しているノード)に対して、共有オブジェクトのコピーやインスタンスを要求できるようになります。

通常のクラスインスタンス(独立したプロパティやシグナルの発火を持つもの)を使用する場合とは異なり、QtROでは共有オブジェクトへの変更が、そのすべてのコピー間で自動的に同期されます。いくつかの例外を除き、これらのコピーは元のオブジェクトと同一のQt APIを持ち、あたかも元のオブジェクトが利用可能であるかのように正確に使用されることを意図しています。

QtROでは、元のオブジェクトは「ソース(Source)」と呼ばれます。これは、必要な機能を提供するためのビジネスロジックを備えた、完全に実装されたC++クラスです。このオブジェクトのコピーは「レプリカ(Replica)」と呼ばれます。 レプリカ用にC++コードを記述する必要はなく、代わりにノードからインスタンスを要求します。シグナルを独自のスロットに接続するなど、レプリカを使用するためのコードは多少必要ですが、内部の挙動を実装する必要はありません。それはすでにソース側で処理されています。

ソースが別のプロセス上、あるいは別のデバイス上にある可能性があるため、QtROでは、プロセス間通信(IPC)を使用しない開発では通常遭遇しないような考慮すべき要素があります。具体的には、そのプロセスやデバイスが存在しない場合はどうなるのでしょうか? そこで、Replica API に追加された機能が役立ちます:

  • initialized() シグナルは、レプリカが QtRO ネットワークからソースの状態を受信すると発火します。
  • isReplicaValid プロパティとstateChanged()シグナルの両方が、接続が切断された場合に通知を行います。

QtRO 経由で共有されるオブジェクトは、すべての通信にノード間のリンク(コンジット)を使用します。QObject を共有したい場合は、他のノードが接続できる URL を持つホストノードを作成する必要があります。Registryを使用して接続を容易にすることもできますが、ソースを共有するノードは依然としてホストノードである必要があります。共有される各オブジェクトには、QtRO ネットワーク上でそれを識別するために使用される名前(QString )が割り当てられます。

実装

リモートオブジェクトの使用例を示すために、ソース側では以下の作業が必要です:

  1. repc(Qt Remote Objects コンパイラ)を使用するか否かにかかわらず、他のノードにレプリケートされるソースオブジェクトを作成します。
  2. 必要に応じて、Registryを作成します。そうでない場合は、直接接続を使用します。
  3. ソースオブジェクトを共有できるように、ホストノードを作成します。
  4. ノードのenableRemoting()関数を呼び出し、ソースオブジェクトを共有します。

レプリカ側では、以下の操作が必要です:

  1. 必要に応じて、repcを使用してプロジェクトのReplicaヘッダーを生成します。
  2. ソースホストノードと接続するノードを作成します。
  3. ノードの `acquire()` 関数を呼び出し、レプリカへのポインタを作成します。

以下の例では、repc でコンパイルされた静的オブジェクトと動的なソースオブジェクトの両方を示しています。さらに、ノード間の直接接続と、レジストリを使用する接続についても示しています。

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