【问题标题】:Is it possible to suppress single-click events during a double-click?是否可以在双击期间抑制单击事件?
【发布时间】:2018-11-21 14:06:18
【问题描述】:

我们的应用程序支持在窗口上执行不同操作的单击和双击事件。然而,我们总是在双击的过程中得到一个单击事件,这会导致不希望的效果。

我们的应用程序是在 Qt 中,但实际上这是一个关于底层 Windows/Mac API 的问题 - 这是一个基本细节,操作系统会在您抬起手指时检测到单击,因为它不可能知道您要去第二次点击,还是可以阻止?

如果无法预防,他们接受的最佳实践是如何处理它?

【问题讨论】:

  • 无法更改行为。解决这个问题的常用方法是用户界面设计,其中单击操作不会干扰双击操作。例如。在资源管理器中,单击选择一个项目,而双击调用所选项目的默认操作。

标签: macos qt winapi


【解决方案1】:

当你得到WM_LBUTTONDOWN(或Qt等价物)时启动一个计时器。如果您在计时器到期之前收到WM_LBUTTONDBLCLK(或Qt 等效项),请取消计时器并执行您的双击操作。否则,当计时器到期时,执行您的单击事件。

在 Windows 上,您可以使用 GetDoubleClickTime() 获取双击时间。

这是您能做的最好的事情 - 您无法阻止在任一平台上首先生成单击消息。

【讨论】:

  • WM_LBUTTONDOWN, WM_LBUTTONDBLCLK?为此,我更喜欢Qt::MouseButton 常量。 ;-)
  • @Scheff 当然,如果这样更容易,我不知道 Qt
  • 您能否明确说明单击向上/向下事件不能在您的答案中被抑制,正如您所暗示的那样,并且对我的问题的评论指出?只是为了让它更完整,以便我可以接受?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2012-01-25
  • 2019-07-06
  • 2021-11-12
  • 2012-08-07
  • 1970-01-01
相关资源
最近更新 更多