Qt Remote Objects ソース
大まかに言えば、QObject 型をソースとして直接使用することも、.rep テンプレート内で必要なAPIを定義し、repcコンパイラで使用することも可能です。
すでに完全に定義済みの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 の使用を始めるための手っ取り早い方法です。このクラスを使用するには、このクラスを継承するクラスを作成し、生成されたヘッダーファイル内で「pure virtual」としてマークされている定義済みのスロットを実装する必要があります。また、公開されたプロパティを管理し、シグナルを発信するための必要なロジックを、自身のクラスに追加する必要があります。
実装の詳細を隠蔽する必要がある場合は、ヘッダーファイルで宣言されている 2 番目のクラスである <Type>Source クラスを使用してください。このクラスの定義にはデータメンバーが含まれておらず、ゲッター/セッター関数も純粋仮想関数として定義されています。コードの記述量は増えるかもしれませんが、このクラスを使用することで、実装の柔軟性が高まります。
ヘッダーに生成される3番目のクラスは <Type>Source です。これはテンプレート化されたクラスであり、特にテンプレート化されたバージョンの `QRemoteObjectHostBase::enableRemoting()` で使用するために用意されています。これにより、必要なAPIをサポートする任意の `QObject ` をソースとして使用できます。プロパティやシグナル/スロットのパラメータを隠蔽または変換するには、このクラスを使用してください。 実装で正しいAPIが提供されていない場合、コンパイル時に警告が発生します。
注:レプリカとソースは どちらもQObject から派生していますが、それらのQObject APIは決して公開されません。例えば、レプリカにはdestroyed シグナルがありますが、ソースのdestroyed シグナルは伝播されません。ソースとその各レプリカは、独自の接続とライフタイムを持つ一意のQObjectです。 その代わりに、公開されるAPIは、repcで使用される.rep テンプレートによって定義されます。生のQObjectの場合、すべてのAPI要素は特定の祖先からの継承チェーン内で定義されます。QObject の親は、祖先でQ_CLASSINFO("RemoteObject Type") を定義しない限り、常に使用されます。Q_CLASSINFO("RemoteObject Type") を使用する場合、そのクラスのAPIが使用されるAPIの最下位レベルとなります。
ソースの特定
ホストノードは複数のソースを共有できるため、各ソースには名前が必要です。repcによって生成されたすべてのヘッダーには、ノードがクラス名を特定するための仕組みが含まれています。replica、simplesource、またはsourceタイプの場合はQ_CLASSINFO 、SourceAPIタイプの場合は静的なname() 関数です。独自のQObject タイプをQRemoteObjectHostBase::enableRemoting()に渡す場合、名前は次のロジックを使用して決定されます:
- QRemoteObjectHostBase::enableRemoting() には、オプションで名前を渡すことができます。指定された場合、その名前が使用されます。
- オブジェクトまたはその祖先オブジェクトのいずれかに「RemoteObject Type」型のQ_CLASSINFO が定義されている場合、その型名が使用されます。
- QObject の objectName が設定されている場合は、それが使用されます。
- 上記のいずれも利用できない場合、QRemoteObjectHostBase::enableRemoting() の呼び出しは失敗し、false を返します。
© 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.