如何接受/忽略QKeyEvent
how to accept/ignore QKeyEvent
http://qt-project.org/doc/qt-5/qwidget.html#keyPressEvent
请注意,QKeyEvent以isAccept()==true开头,因此您不需要需要调用QKeyEvent::accept()-只是不调用基类如果您按键操作,则执行。
http://qt-project.org/doc/qt-5/qkeyevent.html#details
键事件包含一个特殊的接受标志,该标志指示接收器将处理密钥事件。如果按键按下或释放事件不由您的小部件处理。关键事件向上传播到父小部件链,直到小部件接受它为止使用accept()或事件筛选器使用它默认情况下会忽略多媒体键。如果您的小部件处理这些事件。
这有点令人困惑。我应该打电话给接受还是不接受?如果我不处理它,我应该调用基本实现还是调用ignore?
第一页写着"我不需要调用accept(),第二页写着"沿着父窗口小部件链向上传播,直到小部件用accept()接受它">
如果我调用基本版本,如果它是QWidget,它基本上会调用ignore()。这难道不意味着它会返回到我的keyPressedEvent,返回忽略状态,然后QWidget的版本被再次调用,因为"键事件被传播到父窗口小部件"吗?
正如它所说,它是自动接受的。所以,如果你在处理它,你什么都不用做。只有当您没有处理关键事件时,才应该调用ignore()
。
如果您的类是QWidget
的子类,并且您正在处理键事件,那么不要调用基实现。如果您不处理它,您可以直接调用基本实现,因为它将调用ignore()
。
如果你想了解更多关于接受和忽略事件的信息,你可以阅读这篇文章。
- 第一页读到我不需要调用accept(),第二页读到"向上传播到父小部件链,直到小部件用accept(()接受它">
这意味着如果您选择忽略它,它将传播到parent widget
。如果您选择接受,它将不传播到parent widget
。
- 如果我调用基本版本,如果它是QWidget,它基本上会调用ignore()。这难道不意味着它会返回到我的keyPressedEvent,返回忽略状态,然后QWidget的版本被再次调用,因为"键事件被传播到父窗口小部件"吗
基类与父窗口小部件不同。基类是您的类派生自的类。父窗口小部件是包含this
对象作为其子窗口小部件的对象。这通常是作为参数传递给构造函数的小部件。但是,如果父窗口小部件是QWidget
类型,那么是的,情况就是这样。
- 在fstream期间忽略空行
- 概念TS检查忽略私有访问修饰符
- C++宏忽略之后的内容
- 不知道某个东西是否被忽略会引入未定义的行为吗
- clang整洁10忽略了我的NOLINT命令
- If语句在c++中被忽略
- 错误:在为指针赋值时,void值没有被忽略
- 为什么stream::忽略未按预期工作
- Craps游戏问题,忽略if语句
- c++字符串中的字符将被忽略
- 为什么在 x64 中忽略__stdcall调用约定?
- 为什么C++的文件 I/O 在读取文本文件时忽略初始空行?我怎样才能让它不这样做?
- MSVC 忽略 [[maybe_unused]] 的功能?
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- Pytorch torch.cholesky忽略异常
- C++ - 忽略并从其他文件获取数据
- 如何忽略输入流中的某些字符?
- PangoLayout 中忽略的新行
- 如何在Qt 4.8中阻止/忽略/丢弃早于特定超时的用户输入事件
- 如何接受/忽略QKeyEvent