Qt Remote Objects
リモートオブジェクトの概念
Qt Remote Objects (QtRO) は Qt 用に開発されたプロセス間通信 (IPC) モジュールです。このモジュールは Qt の既存の機能を拡張し、プロセス間やコンピュータ間の情報交換を簡単に行えるようにします。
この情報交換を可能にする Qt の重要な機能の一つは、オブジェクトの API(プロパティ、シグナル、スロットで定義)と、その API の実装を区別することです。QtROの目的は、真のQObject が別のプロセスにある場合でも、期待されるAPIを満たすことです。オブジェクトのコピー(QtROではReplica)で呼び出されたスロットは、真のオブジェクト(QtROではSource)に転送され処理される。すべてのReplicaはSourceの更新(プロパティの変更やシグナルの発信)を受け取ります。
ReplicaはSourceオブジェクトの軽量なプロキシですが、Replica は QObject と同じ接続と動作をサポートしており、Qt が提供する他のQObject と同じように使用できます。舞台裏では、QtRO が Replica が Source と同じように見えるために必要なすべての処理を行います。
リモートオブジェクトは、例えば、従来のリモートプロシージャコール(RPC)の実装とは動作が異なることに注意してください:
- RPC では、クライアントがリクエストを行い、応答を待ちます。
- RPCでは、クライアントはリクエストを行い、応答を待ちます。RPCでは、サーバーはリクエストに対する応答でない限り、クライアントに何もプッシュしません。
- 多くの場合、RPCの設計は、異なるクライアントが互いに独立するようになっています。例えば、2つのクライアントが地図サービスに道順を尋ねて、異なる結果を得ることができます。
QtROでは、プロパティを持たないソースや、戻り値を持つスロットとして、このRPCスタイルの動作を実装することが可能ですが、QtROは、処理が本当にリモートであるという事実を隠しています。QObject自分でReplicaを作成する代わりにノードからReplicaを取得し、ステータスシグナル(isReplicaValid() )を使用することができます。
使用例GPS
全地球測位システム(GPS)受信機のようなセンサーを考えてみましょう。QtROの用語では
- ソースは、GPS ハードウェアと直接やりとりし、現在位置を取得するプロセスです。
- 位置情報は、QObject プロパティとして公開されます。位置情報が定期的に更新されると、これらのプロパティが更新され、変更されたシグナルが発信されます。
- レプリカは他のプロセスで作成され、常に現在地を知ることができますが、センサーデータから位置を計算するロジックは必要ありません。
- Replicaのロケーション変更シグナルに接続すると、期待通りに動作する。Sourceから発信されたシグナルが、全てのReplicaのシグナル発信のトリガーとなる。
使用例プリンタへのアクセス
プリンタへのアクセスを提供するサービスを考えてみましょう。QtROの用語では
- ソースは、プリンタを直接制御するプロセスである。
- インク残量とプリンタの状態は、QObject プロパティで監視されます。これらのプロパティが更新されると、プロパティが変更されたシグナルが出力されます。
- 重要な機能である印刷機能は、プリンターに返される必要があります。ちなみに、これはQtスロットの仕組みと一致しており、QtROはレプリカがソースを呼び出す方法として使用しています。事実上、プロパティとシグナルはソースからレプリカへ、スロットはレプリカからソースへ送られます。
- 印刷要求が受理されると、プリンタのステータスが変更され、statusプロパティが変更されます。これはすべてのレプリカに報告されます。
モジュールの使用
Qtモジュールを使用するには、モジュールライブラリに対して直接、または他の依存関係を通してリンクする必要があります。CMakeや qmakeなど、いくつかのビルドツールはこのための専用サポートを持っています。
CMakeでビルドする
find_package()
コマンドを使って、Qt6
パッケージの中から必要なモジュールコンポーネントを探します:
find_package(Qt6 REQUIRED COMPONENTS RemoteObjects)
CMakeによるビルドの概要も参照してください。
qmakeによるビルド
モジュールをqmakeでビルドするように設定するには、プロジェクトの.proファイルにQT
変数の値としてモジュールを追加します:
QT += remoteobjects
記事とガイド
- 入門Qt Remote Objects
- ノード
- ソース
- レプリカ
- レジストリ
- カスタム・トランスポートの使用
- コンパイラ
- リモート・オブジェクトの相互作用
- トラブルシューティング
- プロトコルのバージョン管理
- 例
APIリファレンス
ライセンス
Qt Remote Objects はQt Companyの商用ライセンスで入手できます。また、GNU Lesser General Public License, version 3 またはGNU General Public License, version 2 の下でも利用可能です。詳細はQt ライセンスをご覧ください。
© 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.