キューに入れられた信号にカスタムタイプを使用している場合。 カスタムタイプを登録する正しい手順は何ですか?qRegisterMetaTypeを呼び出す前にQ_DECLARE_METATYPEを呼び出す必要がありますか?
qRegisterMetaType
の前にQ_DECLARE_METATYPE
に電話する必要がありますか?
キューに登録された信号はカスタムタイプを登録する必要がありますが、直接信号は登録しないのはなぜですか?
キューに入れられた信号にカスタムタイプを使用している場合。 カスタムタイプを登録する正しい手順は何ですか?qRegisterMetaTypeを呼び出す前にQ_DECLARE_METATYPEを呼び出す必要がありますか?
qRegisterMetaType
の前にQ_DECLARE_METATYPE
に電話する必要がありますか?
キューに登録された信号はカスタムタイプを登録する必要がありますが、直接信号は登録しないのはなぜですか?
qRegisterMetaTypeの前にQ_DECLARE_METATYPEを呼び出す必要がありますか?
です。 qRegisterMetaTypeのQtドキュメントには、明示的には次のように書かれています。
TはQ_DECLARE_METATYPE()で宣言する必要があります。元の値が渡された場合(これを登録することで、Qtが(確かにQVariantを使用しています)そのイベントループ内でのコピーを作成することができますし、後でそれを引数として渡すので、あなたは、キューに入れられた信号用のカスタムタイプを登録する必要が
スコープ外のため長いです)。
質問はナンセンスです:Q_DECLARE_METATYPE
は電話ではありません。それはstruct QMetaTypeId<TYPE>
を定義します。明らかに、qRegisterMetaType<T>(...)
または他の呼び出し可能な呼び出しは、呼び出しサイト外で使用する型を宣言することはできません。
したがって、Q_DECLARE_METATYPE
が何をしているのかは、関数呼び出しを書くことによって行うことはできません。 Q_DECLARE_METATYPE
で提供される機能が必要な場合は、それを使用する必要があります。
1.はい、必要です。 2.キューに入れられた接続は、いくつかの追加のランタイム初期化と、引数のディープコピーを行う必要があるため。 Btw、あなたは 'QVariant'でデータをラップし、それを引数として使うことができます –