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(使用前将#替换为@)