ネットワーク経由でQt信号を送信したいと考えています。Qtのネットワーク上の信号/スロットのメカニズム
- は、静的メソッド
::fromSignal
- を使用して
qMetaMethod
を作成し、メソッド名、パラメータ名、その型ID[1]
し、作成したメタメソッドを使用して値を取得します:信号の呼び出しをシリアル化することはQtのメタタイプのシステムを使用して、非常に単純です。 - すべてをあなたの好みのフォーマット(JSON、XML)にまとめて送信します。
しかし、これまでのところ、私はシリアル化されたデータを使用して信号を起動する方法を見つけ出すことができませんでした:QMetaObject::invokeMethod(..)
は、文字列として、信号/メソッド名を取ります。問題は引数です:QGenericArgument
として提供され、実際の型(文字列ではないか、typeId
)と関連する値を必要とするQ_ARG
マクロを使用することによってのみ作成できます。また、引数の数はコンパイル時に定義する必要があります。引数のリストを取るinvokeMethod(..)
はありません。
何か不足していますか?または、これを行うためのより良い/代替方法がありますか?
[1]
さらに質問:タイプがQ_DECLARE_METATYPE(..)
を使用して登録されたときに常に同じタイプIDを取得するようにするにはどうすればよいですか?
あなたは何も欠けていません。 –
Er ....私は信号/スロットのメカニズムがネットワーク上で全部働くように設計されているとは思わない。私はこの点に関して自分自身が間違っていることを見てうれしいです。 –
IMHO、ソケットに基づくIPCはキーであり、変換信号/スロットはちょうどピーナッツであり、IPCの異なる面で処理することが知られている信号とスロットを意味します。 – AlexanderVX