是否有必要在子类中调用基类的事件处理程序?

时间:2013-01-29 10:24:27

标签: qt inheritance qt4 qt5 qevent

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

是否有必要在最后调用基类的实现?

示例:

MyWidget::keyPressEvent(QKeyEvent *e)
{
    // my event handler...

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

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

1 个答案:

答案 0 :(得分:5)

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