如何在Qt 4.8中阻止/忽略/丢弃早于特定超时的用户输入事件

How to block/ignore/discard user input events that are older than a certain timeout in Qt 4.8

本文关键字:于特定 超时 入事件 输入 用户 忽略 Qt      更新时间:2023-10-16

这个问题可能与这些问题有关:

  • QEventLoop:获取安排事件的时间
  • 获取 QInputEvent 在 Qt 4.8 中被放入 QEventLoop 队列时的时间戳

我想检测用户输入是否早于某个超时,并在必要时阻止此类事件。想象一下这样的场景:UI 没有响应并在主线程中挂起几秒钟,并且用户不断发送输入事件。这些事件被排队,然后以一定的延迟进行处理。我想抓住这个并能够丢弃/忽略它们。我知道这不应该发生,因为 UI 应该始终响应,并且长任务应该移动到工作线程或类似概念,但我仍然希望能够检测到这种罕见的情况。请注意,当系统本身冻结几秒钟时,也可能发生同样的情况,这可能是由于整个系统的高负担。

我查看了Qt中用于嵌入式的可用输入驱动程序的默认实现的代码,并决定编写自己的输入概念,以便能够从Linux输入文件中读取时间戳。然后,我使用这些时间戳将它们与当前时间进行比较,以便在它们很久以前排队时删除它们。

所需的代码非常特定于平台,但它适用于我的方案。我想我必须接受我自己的答案,尽管我希望有一个更普遍的解决方案。