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

dai*_*isy 3 inheritance qt qt4 qevent qt5

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

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

例:

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

    // now call parent event handler, necessary?
    QWidget::keyPressEvent(e);
}
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*erg 6

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