Qt Remote Objects
リモートオブジェクトの概念
Qt Remote Objects (QtRO) は、Qt 向けに開発されたプロセス間通信 (IPC) モジュールです。このモジュールは、Qt の既存の機能を拡張し、プロセス間やコンピュータ間で情報を容易にやり取りできるようにします。
この情報交換を可能にするQtの重要な特徴の一つは、オブジェクトのAPI(プロパティ、シグナル、スロットによって定義される)と、そのAPIの実装とを区別している点です。QtROの目的は、たとえ本来のQObject が別のプロセスにある場合でも、期待されるAPIを満たすことにあります。 オブジェクトのコピー(QtROでは「レプリカ」)に対して呼び出されたスロットは、処理のために本来のオブジェクト(QtROでは「ソース」)に転送されます。すべてのレプリカは、プロパティの変更や発信されたシグナルなど、ソースへの更新を受け取ります。
Replica はSourceオブジェクトの軽量なプロキシですが、QObjectと同じ接続や動作をサポートしているため、Qtが提供する他のQObject と同様に使用できます。内部的には、QtROがReplicaがSourceと同じように振る舞うために必要なすべての処理を処理しています。
なお、リモートオブジェクトの挙動は、従来のリモートプロシージャコール(RPC)の実装とは異なります。例えば:
- RPCでは、クライアントがリクエストを送信し、レスポンスを待ちます。
- RPCでは、サーバーはリクエストへの応答でない限り、クライアントに何もプッシュしません。
- 多くの場合、RPCの設計では、異なるクライアント同士が互いに独立しています。例えば、2つのクライアントがマッピングサービスに道順を問い合わせた場合、異なる結果が返されることがあります。
QtRO では、プロパティを持たないソースや、戻り値を持つスロットを使用して、この RPC スタイルの挙動を実装することは可能ですが、QtRO は、処理が実際にはリモートで行われているという事実を隠しています。 自分でレプリカを作成するのではなく、ノードからレプリカを取得し、場合によってはステータスシグナル(isReplicaValid())を使用しますが、その後は他のQObject ベースの型と同様にオブジェクトとやり取りします。
ユースケース:GPS
グローバル・ポジショニング・システム(GPS)受信機などのセンサーを考えてみましょう。QtROの用語で言えば:
- 「ソース」とは、GPSハードウェアと直接やり取りを行い、現在の位置情報を算出するプロセスのことを指します。
- 位置情報はQObject のプロパティとして公開されます。位置情報の定期的な更新により、これらのプロパティが更新され、プロパティ変更シグナルが発行されます。
- レプリカは他のプロセス内に作成され、常に現在の位置情報を把握していますが、センサーデータから位置情報を算出するためのロジックは一切必要としません。
- レプリカ上の位置変更シグナルに接続すると、期待どおりに動作します。つまり、ソースから発せられたシグナルが、すべてのレプリカでのシグナル発火をトリガーします。
ユースケース:プリンターへのアクセス
プリンターへのアクセスを提供するサービスを想定してください。QtROの用語で言えば:
- ソースは、プリンタを直接制御するプロセスとなります。
- インク残量やプリンタのステータスは、QObject のプロパティによって監視されます。これらのプロパティが更新されると、プロパティ変更シグナルが発せられます。
- 「何かを印刷する」という主要な機能は、プリンタ側に渡される必要があります。ちなみに、これは QtROがレプリカがソースに対して呼び出しを行う方法として採用している Qt のスロットメカニズムと一致しています。事実上、プロパティとシグナルはソースからレプリカへと流れ、スロットはレプリカからソースへと流れます。
- 印刷リクエストが受理されると、プリンタのステータスが変化し、statusプロパティの変更がトリガーされます。これにより、すべてのReplicaにその変更が通知されます。
モジュールの使用方法
Qtモジュールを使用するには、直接または他の依存関係を通じて、モジュールライブラリに対してリンクを行う必要があります。CMakeやqmakeなど、いくつかのビルドツールにはこのための専用のサポートが用意されています。
CMake を使用したビルド
find_package() コマンドを使用して、Qt6 パッケージ内の必要なモジュールコンポーネントを特定します:
find_package(Qt6 REQUIRED COMPONENTS RemoteObjects)「CMake によるビルド」の概要も参照してください。
qmake を使用したビルド
qmake を使用してモジュールをビルドするように設定するには、プロジェクトの .pro ファイル内の `QT ` 変数の値として、そのモジュールを追加します。
QT += remoteobjects記事とガイド
- はじめにQt Remote Objects
- Nodes
- ソース
- レプリカ
- レジストリ
- カスタムトランスポートの使用
- コンパイラ
- リモートオブジェクトとの相互作用
- トラブルシューティング
- プロトコルのバージョン管理
- 例
- セキュリティに関する考慮事項
APIリファレンス
ライセンス
Qt Remote Objects は、The Qt Company から商用ライセンスの下で提供されています。また、GNU Lesser General Public License バージョン 3 またはGNU General Public License バージョン 2 の下でも利用可能です。詳細については、「Qt ライセンス」を参照してください。
© 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.