如何接受/忽略Qkeyevent

问题描述 投票:0回答:1

Https://doc.qt.io/qt-5/qwidget.html#keypressevent

注意Qkeyevent以isaccepted()== true开始,所以您不 需要致电Qkeyevent :: Accept() - 请不要致电基类 实施如果您采取钥匙。

https://doc.qt.io/qt-5/qkeyevent.html#details

一个关键事件包含一个特殊的接受标志,该标志指示是否是否 接收器将处理关键事件。如果是 密钥按下或发布事件未由您的小部件处理。关键事件 在小部件接受之前,要繁殖父部件链 使用Accept()或事件过滤器会消耗它。关键事件 默认情况下忽略了多媒体密钥。您应该致电Accept()如果 您的小部件处理这些事件。

这有点令人困惑。我应该打电话接受吗?我应该调用基本实现或拨打忽略,如果我不处理?

第一页读取我不需要调用accept(),第二页读取“在窗口小部件接受

with accept()之前,将press the prends传播。

如果我称基本版本为基本版本,则基本上将ignore()如果是qwidget。这并不意味着它将返回我的kepressedevent,以忽略状态返回,然后Qwidget的版本再次称为原因“密钥事件已传播到父窗口”?

就像它说,它被自动接受。因此,如果您要处理它,则无需做任何事情。只有当您不处理关键事件时,才应该致电
c++ qt event-handling keyevent qkeyevent
1个回答
3
投票

如果您的班级是
QWidget

的子类,如果您要处理关键事件,则请勿调用基本实现。如果您不处理它,则您可以调用基本实现,因为它将调用

ignore()

。

如果您想了解更多有关接受和忽略事件的信息,您可以阅读this
第一页读取我不需要调用Accept(),第二页读取“在with accept()接受窗口小部件接受它之前,将其传播到父型小部件链中”

这意味着,如果您选择ignore

    ,它将被传播到
  • parent widget。如果您选择
  • accept

,则它将not传播到

parent widget
. 如果我称基本版本为基本版本,则基本上将ignore()如果是qwidget。这并不意味着它将返回我的kepressedevent,以忽略状态返回,然后Qwidget的版本再次称为原因“密钥事件已传播到父窗口”? 基类与父窗口小部件不同。基类是您的课程派生的课程。父窗口小部件是一个包含this对象作为其子小部件的对象。这通常是将构造函数传递给构造函数的小部件。但是,如果父窗口小部件是
QWidget
类型,那么是的,就是这样。

© www.soinside.com 2019 - 2025. All rights reserved.