如何接受/忽略QKeyEvent

2023-12-13

http://qt-project.org/doc/qt-5/qwidget.html#keyPressEvent

请注意,QKeyEvent 以 isAccepted() == true 开头,因此您不需要 需要调用 QKeyEvent::accept() - 只是不调用基类 如果您按密钥采取行动,则实施。

http://qt-project.org/doc/qt-5/qkeyevent.html#details

按键事件包含一个特殊的接受标志,指示是否 接收者将处理按键事件。如果出现以下情况,您应该调用ignore() 您的小部件不处理按键或释放事件。一个关键事件 沿着父部件链向上传播,直到一个部件接受它 与accept()或事件过滤器消耗它。关键事件 默认情况下会忽略多媒体键。你应该调用accept()如果 您的小部件处理这些事件。

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

第一页显示“我不需要调用accept()”,第二页显示“在父窗口小部件链上传播,直到窗口小部件接受它”与接受()"

如果我调用基本版本,如果它是 QWidget,它基本上会调用ignore()。这是否意味着它将返回到我的 keyPressedEvent,以忽略状态返回,然后再次调用 QWidget 的版本,因为“按键事件传播到父窗口小部件”?


就像它说的那样,它会被自动接受。因此,如果您正在处理它,则无需执行任何操作。仅当您不处理关键事件时才应该调用ignore().

如果你的类是QWidget,如果您正在处理按键事件,则不要调用基本实现。如果你不处理的话你可以只调用基本实现,因为它会调用ignore().

你可以阅读this,如果您想了解更多有关接受和忽略事件的信息。

  • 第一页显示“我不需要调用accept()”,第二页显示“在父窗口小部件链上传播,直到窗口小部件通过accept()接受它”

这意味着如果您选择ignore它,它将被传播到parent widget。如果您选择accept它,它会not被传播到parent widget.

  • 如果我调用基本版本,如果它是 QWidget,它基本上会调用ignore()。这是否意味着它将返回到我的 keyPressedEvent,以忽略状态返回,然后再次调用 QWidget 的版本,因为“按键事件传播到父窗口小部件”?

基类与父小部件不同。基类是您的类派生的类。父部件是一个包含以下内容的对象:this对象作为其子部件。这通常是作为参数传递给构造函数的小部件。但如果父小部件是QWidget类型,那么是的,就是这样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何接受/忽略QKeyEvent 的相关文章

随机推荐