首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何接受/忽略QKeyEvent

如何接受/忽略QKeyEvent
EN

Stack Overflow用户
提问于 2014-02-21 13:39:37
回答 1查看 3.1K关注 0票数 1

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

键事件包含一个特殊的接受标志,该标志指示接收方是否将处理该键事件。如果小部件没有处理键按下或发布事件,则应该调用not ()。一个关键事件在父小部件链上传播,直到小部件用accept()接受它,或者事件过滤器使用它。默认情况下,多媒体键的键事件被忽略。如果小部件处理这些事件,则应该调用accept()。

有点让人费解。我应该打电话给接受还是不?如果我不处理它,我应该调用基本实现还是调用忽略?

第一页读到我不需要调用accept(),第二页读到“沿着父小部件链传播,直到小部件用accept()接受为止”

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-21 13:52:53

就像上面说的,它是自动接受的。所以如果你在处理这件事,你什么都不用做。只有当您没有处理关键事件时,才应该调用ignore()

如果您的类是QWidget的子类,如果您正在处理关键事件,则不要调用基本实现。如果你不处理的话,ignore()

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

  • 第一页读到我不需要调用accept(),第二页读到“沿着父小部件链传播,直到小部件用accept()接受为止”

这意味着如果您选择忽略 it,它将被传播到parent widget。如果您选择接受 it,它将而不是传播到parent widget

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

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21936037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档