Qt Remote Objects ソース
高度なレベルでは、QObject 型をソースとして直接使用することもできます。また、repcコンパイラで使用するために、.rep
テンプレートで必要な API を定義することもできます。
すでに完全に定義されたQObject を持っている場合は、それをQRemoteObjectHostBase::enableRemoting() に渡すことで、ソースとして使用することができます。こうすることで、他のプロセスやデバイスが、そのオブジェクトのdynamics replicas を作成して対話できるようになります。
詳細については、「リモート・オブジェクト相互作用」を参照してください。
REPC_SOURCE変数を使用して、repc にプロジェクト用のソース・ヘッダ・ファイルを生成させると、必要な API を実装するための 3 つの異なるオプションが提供されます。
クラス名を Foo とすると、以下のオプションがあります:
- FooSimpleSource継承
- FooSource継承
- FooSourceAPIを使用する。QObject
.rep
ファイルの作成方法の詳細については、rep ファイル・フォーマットを参照してください。
ヘッダー内には<Type>SimpleSourceクラスが定義されており、各プロパティの基本的なゲッター/セッター・メソッドを提供し、ヘッダー内の正しいプロパティ型のデータ・メンバーを実装しています。ここでの"<Type>"は、.rep
ファイルからのクラス名を表します。したがって、.rep
ファイルでクラスが "MyType "タイプである場合、生成されるヘッダーファイルにはMyTypeSimpleSourceクラスが宣言されます。これは、APIを使い始めるための簡単な方法です。このクラスを使用するには、このクラスを継承するクラスを作成し、定義されたスロットを実装する必要があります。また、公開されているプロパティを管理したりシグナルを発信したりするために必要なロジックもクラスに追加する必要がある。
実装の詳細を隠す必要がある場合は、ヘッダーファイルで宣言されている2番目のクラス、<Type>Sourceクラスを使用します。このクラスの定義では、データ・メンバーは提供されず、ゲッター/セッター関数も純粋な仮想関数になります。より多くのコードを書く必要があるかもしれませんが、このクラスを使用することで、より柔軟な実装が可能になります。
ヘッダーで生成される3番目のクラスは<Type>SourceAPIである。これはテンプレート化されたクラスで、特にテンプレート化されたバージョンのQRemoteObjectHostBase::enableRemoting()で使用するためのものです。これにより、必要なAPIをサポートする任意のQObject をソースとして使用できるようになります。プロパティやシグナル/スロット・パラメータを隠したり変換したりするには、このクラスを使用します。あなたの実装が正しいAPIを提供していない場合、コンパイル時に警告が表示されます。
注: レプリカとソースはどちらもQObject から派生しますが、QObject API が公開されることはありません。例えば、レプリカはdestroyed シグナルを持っていますが、ソースのdestroyed シグナルは伝播されません。ソースとその各レプリカは、独自の接続と寿命を持つ固有の QObject です。代わりに、公開されるAPIは、repcによって使用される.rep
テンプレートによって定義される。生の QObject の場合、すべての API 要素は特定の祖先からの継承チェーンで定義されます。祖先でQ_CLASSINFO("RemoteObject Type")
を定義しない限り、QObject の親が常に使用されます。Q_CLASSINFO("RemoteObject Type")
を使用する場合、そのクラスの API が使用される API の最下位レベルとなります。
ソースの識別
ホスト・ノードは複数のソースを共有できるため、各ソースには名前が必要です。repcが生成するすべてのヘッダには、ノードがクラス名を決定する方法が含まれています。レプリカ、シンプ ルソース、またはソース・タイプにはQ_CLASSINFO 、SourceAPIタイプには静的なname()
関数を使用します。独自のQObject タイプをQRemoteObjectHostBase::enableRemoting() に渡す場合、名前は以下のロジックを使用して決定されます:
- QRemoteObjectHostBase::enableRemoting() には、オプションで名前を渡すことができます。オプションで名前を () に渡すことができます。
- オブジェクトまたはその祖先のいずれかに、"RemoteObject Type" 型のQ_CLASSINFO が定義されている場合、その型名が使用される。
- QObject の objectName が設定されていれば、それが使用される。
- 上記のいずれも使用できない場合、QRemoteObjectHostBase::enableRemoting() の呼び出しは失敗し、false を返します。
© 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.