Qt 中的自定义事件

Custom events in Qt

本文关键字:事件 自定义 Qt      更新时间:2023-10-16

我正在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吗?)是否被"识别和处理"。这应该处理循环中的所有其他事件吗?

handleCustomEvent()

您需要在类MyClass中实现的方法,该方法将处理自定义事件MyCustomEventType

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

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

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


因此,您需要在MyClass中声明handleCustomEvent()并实现它。
像这样:

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

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