Qt リモートオブジェクト
リモートオブジェクトの概念
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のロケーション変更シグナルに接続することで、期待通りに動作する。ソースから発信されたシグナルが、全ての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 リモートオブジェクトを始める
- ノード
- ソース
- レプリカ
- レジストリ
- カスタムトランスポートの使用
- コンパイラ
- リモート・オブジェクトの相互作用
- トラブルシューティング
- プロトコルのバージョン管理
- 例
APIリファレンス
ライセンス
Qt Remote Objects は、The Qt Company の商用ライセンスでご利用いただけます。また、GNU Lesser General Public License, version 3 またはGNU General Public License, version 2 の下でも利用可能です。詳細はQt ライセンスを参照してください。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。