Qt リモートオブジェクト

リモートオブジェクトの概念

Qt Remote Objects (QtRO) は Qt 用に開発されたプロセス間通信 (IPC) モジュールです。このモジュールは Qt の既存の機能を拡張し、プロセス間やコンピュータ間の情報交換を簡単に行えるようにします。

この情報交換を可能にする Qt の重要な機能の一つは、オブジェクトの API(プロパティ、シグナル、スロットで定義)と、その API の実装を区別することです。QtROの目的は、真のQObject が別のプロセスにある場合でも、期待されるAPIを満たすことです。オブジェクトのコピー(QtROではReplica)で呼び出されたスロットは、真のオブジェクト(QtROではSource)に転送され処理される。すべてのReplicaはSourceの更新(プロパティの変更やシグナルの発信)を受け取ります。

ReplicaSourceオブジェクトの軽量なプロキシですが、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

記事とガイド

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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。