Qt篇——QObject::connect: タイプ「xxx」の引数をキューに入れることができません(「xxx」がqRegを使用して登録されていることを確認してください)

Qt の開発中、特定のシグナルをトリガーしようとしたときにプログラムがクラッシュし、「QObject::connect: Cannot queue argument of type 'xxx' ('xxx' is registered using qRegisterMetaType().)」というエラー プロンプトが見つかりました。

解決策:信号を接続する前に、xxx タイプを登録するだけです

//xxx是你的信号要传递的数据类型.
qRegisterMetaType<xxx>("xxx");

記事の最後にまとめ:

Qt シグナル スロットでカスタム タイプを使用し、スレッドを越えない場合はカスタム タイプのシグナル/スロットを使用して転送すれば問題はないかもしれませんが、クロススレッドが関与すると間違いが発生しやすくなります (つまり、エラー記事の冒頭にあります)。したがって、カスタム タイプを使用してシグナル スロットと通信する場合、エラーを避けるために、最初に qRegisterMetaType() を介してカスタム タイプを登録することをお勧めします。

要約すると、qRegisterMetaType の使用方法は次のとおりです:
  1. 登録場所: このタイプのリンク クロススレッド信号/スロットを初めて使用する前に、通常は現在のクラスのコンストラクターに登録します; 2. 登録メソッド:
  include現在のクラスの先頭に: #include <QMetaType>、コンストラクターにコードを追加します: qRegisterMetaType<MyClass>("Myclass");
  3. Myclass の参照型を個別に登録する必要があります: qRegisterMetaType<MyClass>("Myclass& ");

おすすめ

転載: blog.csdn.net/u011391361/article/details/128392724