1. ホーム
  2. c++

[解決済み] Qtのイベントとシグナル/スロット

2022-12-07 14:48:03

質問

Qtの世界では、イベントとシグナル/スロットはどう違うのでしょうか?

一方が他方を置き換えるのでしょうか?イベントはシグナル/スロットを抽象化したものなのでしょうか?

どのように解決するのですか?

この Qt ドキュメント がおそらく最もよく説明しています。

Qt では、イベントはオブジェクトであり であり、抽象的な QEvent クラスから派生したオブジェクトで アプリケーションの中で、あるいは アプリケーションの中で、あるいは アプリケーションの内部で、あるいは外部の活動の結果として起こったことで を表します。 イベントを受信して処理することができます。 のインスタンスによって受信され、処理されます。 QObject サブクラスのどのインスタンスでも受け取ることができます。 しかし、それらは特に ウィジェットに関連します。このドキュメントでは イベントがどのように配信され、処理されるかを このドキュメントでは、典型的なアプリケーションにおいて、イベントがどのように配信され、処理されるかを説明します。

つまり、イベントとシグナル/スロットは、同じことを達成する2つの並行したメカニズムなのです。一般に、イベントは外部のエンティティ (たとえばキーボードやマウスホイール) によって生成され、イベントループを通じて QApplication . 一般に、コードを設定しない限り、イベントを生成することはありません。イベントをフィルタリングするために QObject::installEventFilter() でフィルタリングするか、適切な関数をオーバーライドしてサブクラス化されたオブジェクトのイベントを処理します。

シグナルとスロットは、生成と受信がより簡単で、任意の2つの QObject サブクラスを接続することができます。これらはメタクラスを通して処理されますが(詳しくは moc_classname.cpp ファイルを見てください)、あなたが作成するクラス間通信のほとんどは、おそらくシグナルとスロットを使用することになるでしょう。シグナルはすぐに配信されるか、キューを介して遅延させることができます(スレッドを使用している場合)。

シグナルを生成することができます。