3

Qt Creator でカスタム イベントを試しています。現在、別のサイトでこのサンプル コードを調べています。

bool MyClass::event(QEvent* e)
{
    if (e && e->type() == MyCustomEventType) {
       MyCustomEvent* ce = dynamic_cast<MyCustomEventType*>(e);
       return handleCustomEvent(ce);
    }
    // very important: still handle all the other Qt events!
    return QObject::event(e);
}

条件ステートメントは、渡されたイベントがカスタム イベントであるかどうかをチェックし、イベントが発生したときに発生させたいコードを実行します。私が理解していないのはreturn handleCustomEvent(e)(この関数は何をするべきか、どこで宣言すべきか)、そして何をするかですreturn QObject::event(e)。Qtのドキュメントで読んだことから、この関数が行う唯一のことは、イベントの関数(これはhandleCustomEventですか?)が「認識され処理された」かどうかを返すことです。これは、ループ内の他のすべてのイベントを処理することになっていますか?

4

1 に答える 1

2

handleCustomEvent()Custom EventMyClassを処理するクラスに実装する必要があるメソッドです。 MyCustomEventType

カスタム イベントでない場合は、他のイベント タイプを処理するために最後の行return QObject::event(e);が呼び出されます。

したがって、スニペットのメソッドはbool MyClass::event(QEvent* e)ルーティングコードのように機能し、処理のためにイベントを送信する場所を決定し、実際にはイベントを処理しません。

'e'それがタイプであると判断されると、このイベントタイプを処理するコードを含むMyCustomEventType呼び出しが呼び出されます。 そうでない場合は、代わりに最後の行でそれを処理するように呼び出します。これにより、残りのすべてのタイプのイベントが処理されます。 したがって、必要でない限り、他のイベントの処理について心配する必要はありません。handleCustomEvent()
QObject::event()


handleCustomEvent()したがって、 inを宣言しMyClassて実装することもできます。
何かのようなもの:

class MyClass {
       ...
       ...
      public:
         bool handleCustomEvent(MyCustomEventType* e);
       ...
       ...
};

実装では、カスタムイベントタイプの処理を実際に行うために、必要に応じてロジックを持つことができますMyCustomEventType

于 2012-09-29T21:40:12.647 に答える