繁体   English   中英

区分Qt中的单击和双击事件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM