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()是您需要在类MyClass中实现的方法,它将处理您的自定义事件 MyCustomEventType

如果不是您的自定义事件,return QObject::event(e);则将调用最后一行来处理其他事件类型。

因此,您的代码片段中的方法bool MyClass::event(QEvent* e)就像一个路由代码,用于决定将事件发送到何处进行处理,而不是实际处理事件。

一旦确定它'e'是类型MyCustomEventType- 它调用handleCustomEvent()将包含您的代码来处理此事件类型。
如果不是 - 最后一行调用QObject::event()来处理它。这将处理所有其他剩余类型的事件。
所以,,您不必担心处理其他事件,除非您愿意。


因此,您将声明handleCustomEvent()MyClass实现它。
就像是:

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

在实现中,您可能拥有所需的逻辑 - 实际为您的自定义事件类型进行处理MyCustomEventType

于 2012-09-29T21:40:12.647 回答