是否需要在子类中调用基类的事件处理函数?

Posted

技术标签:

【中文标题】是否需要在子类中调用基类的事件处理函数?【英文标题】:Is it necessary to call the event handler of the base class in subclasses? 【发布时间】:2013-01-29 10:24:27 【问题描述】:

假设我在我的子类中重新实现了QWidget::keyPressEvent(QKeyEvent *e)

需要在基类的最后调用实现吗?

例子:

MyWidget::keyPressEvent(QKeyEvent *e)

    // my event handler...

    // now call parent event handler, necessary?
    QWidget::keyPressEvent(e);

如果是这样,这样做有什么意义?

【问题讨论】:

【参考方案1】:

如果您不对事件采取行动,则应始终将事件传递给基类的实现,因为它可能会对其采取行动,或者可能为它安装了事件过滤器。例如,QWidget 的默认实现会在用户按下 Esc 时关闭弹出窗口小部件。因此,为确保不破坏任何事件处理,请始终将事件传递给基类,除非您对它们采取行动。

【讨论】:

以上是关于是否需要在子类中调用基类的事件处理函数?的主要内容,如果未能解决你的问题,请参考以下文章

C++中如何在子类的构造函数中调用基类的构造函数来初始化基类成员变量

删除指向子类的指针会调用基类析构函数吗?

C++中,建立子类对象的时候,会调用基类的构造函数,

C++中派生类的构造函数怎么显式调用基类构造函数?

C++中,继承时,创建子类对象,能否在子类构造函数初始化列表里调用基类构造函数?

C#在自己的构造函数之后调用基类的构造函数?