2011-10-08 18 views
12

私はqt信号で標準文字列を放射しようとしています。信号はキューに入れられた状態で配信されます。 qtドキュメントに書いてあるように、タイプをqRegisterMetaTypeに登録しましたが、運はありません。私はこの qRegisterMetaType<std::string>("std::string")qt信号でstd :: stringを出力

答えて

17

のようにそれを登録しています。また、実行する必要があります。

Q_DECLARE_METATYPE (std::string) 

はQ_DECLARE_METATYPEを()すべてのテンプレート ベースの機能に知られているタイプになります追加Qt Doc

を引用し、 QVariantを含む。 名が実行時に解決されているので、あなたもqRegisterMetaType()を呼び出す必要がありはあなたがキューに入れられたシグナルとスロットの接続やQObjectのの プロパティシステムに タイプを使用する場合があります。

+0

私は試したが、まだ動作しません。また、私のプロジェクトではqt以外の型を出すシグナルが多く、Q_DECLARE_METATYPEを実行したことはなく、qRegisterMetaTypeのみであり、動作しています。 – user152508

+1

私はちょうど簡単なテストを行いました。そして、qRegisterMetaTypeとQ_DECLARE_METATYPEの両方を使用することは確かに機能します。どちらか一方を残すと、qRegisterMetaTypeを呼び出す必要があるというランタイムエラーメッセージが表示されます。私の推測では、あなたが使用している他のタイプの場合、あなたは待ち接続を使用していません。 – Chris

+0

OK、私はこのオーバーロードvoid qRegisterMetaTypeStreamOperators(const char * typeName)を使用していたかもしれませんが、なぜそれが動作しなかったのでしょうか。このオーバーレイドint qRegisterMetaType()をQ_DECLARE_METATYPEの組み合わせで試してみました。 – user152508

関連する問題