[英]Distinguish between single and double click events in Qt
我有一个QAbstractItemView
需要对单击和双击事件做出反应。 根据是单击还是双击,操作会有所不同。 发生的问题是在双击事件之前收到单击事件。
是否有推荐的方法/最佳实践来区分两者? 当用户实际双击时,我不想执行单击操作。
我使用的是Qt 4.6
这是一个很好的用户界面设计,以确保您的单击和双击在概念上相关:
Single-Click: select icon
Double-Click: select icon and open it
Single-Click: select color
Double-Click: select color and open palette editor
请注意,在这些示例中,单击操作实际上是双击的子集。 这意味着您可以继续正常执行单击操作,只需双击即可执行其他操作。
如果您的用户界面执行以下操作:
Single-Click: select icon
Double-Click: close window
然后,您将设置用户失败。 即使他们记得单击一下而不是一直双击,但是在双击或等待太久的情况下,很容易意外地将鼠标移动太远。
编辑:
听到这个消息我很难过。
在那种情况下,我发现这两篇文章很有用:
你可以在QtCentre论坛上标题为Double Click Capturing的主题中找到答案;
你可以有一个计时器。 在releaseEvent处理程序中启动计时器,并确保超时足够长,以便先处理双击。 然后,在双击事件处理程序中,您可以停止计时器并防止它被触发。 如果未触发双击处理程序,则计时器将超时并调用您选择的插槽,您可以在其中处理单击。 这当然是一个讨厌的黑客,但有机会工作。
wysota
使用PySide这是Qt 4.8的Python绑定我看到单击提供了一个QEvent.MouseButtonPress
事件,双击提供了一个QEvent.MouseButtonPress
事件紧跟一个QEvent.MouseButtonDblClick
。 Windows上的延迟大约是100ms
。 这意味着如果您需要区分单击和双击,您仍然会遇到问题。
该解决方案需要另一个QTimer
,其延迟略高于内置延迟(增加一些开销)。 如果您观察到QEvent.MouseButtonPress
事件,则启动自己的计时器,如果超时,只需单击一下。 如果是QEvent.MouseButtonDblClick
,则双击并停止计时器以避免单击计数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.