繁体   English   中英

如何接受/忽略QKeyEvent

[英]how to accept/ignore QKeyEvent

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()。

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

第一页读取我不需要调用accept(),第二页读取“传播到父窗口小部件链,直到窗口小部件接受它与accept()

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

就像它说的那样,它会被自动接受。 所以,如果你正在处理它,你不必做任何事情。 只有在您不处理键事件时,才应调用ignore()

如果您的类是QWidget的子类,并且您正在处理键事件,则不要调用基本实现。 如果你不处理它, 你可以调用基本实现,因为它将调用ignore()

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

  • 第一页读取我不需要调用accept(),第二页读取“传播到父窗口小部件链,直到窗口小部件接受它与accept()”

这意味着如果您选择忽略它,它将传播到parent widget 如果您选择接受它,它将不会传播到parent widget

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

基类与父窗口小部件不同。 基类是您的类派生自的类。 父窗口小部件是包含this对象作为其子窗口小部件的对象。 这通常是作为参数传递给构造函数的窗口小部件。 但是如果父窗口小部件是QWidget类型,那么是的,就是这种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM