如何接受/忽略QKeyEvent

时间:2014-02-21 13:39:38

标签: c++ qt event-handling keyevent 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()if   您的小部件处理这些事件。

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

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

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

1 个答案:

答案 0 :(得分:2)

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

如果您的类是QWidget的子类,并且您正在处理键事件,那么请不要调用基本实现。如果您不处理它,you can just call the base implementation as it will call ignore()

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

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

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

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

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