我有一个 QAbstractItemView
需要对单击和双击事件做出反应。根据是单击还是双击,操作会有所不同。发生的问题是在双击事件之前收到单击事件。
是否有推荐的方法/最佳实践来区分两者?当用户实际双击时,我不想执行单击操作。
我使用的是Qt 4.6
我有一个 QAbstractItemView
需要对单击和双击事件做出反应。根据是单击还是双击,操作会有所不同。发生的问题是在双击事件之前收到单击事件。
是否有推荐的方法/最佳实践来区分两者?当用户实际双击时,我不想执行单击操作。
我使用的是Qt 4.6
您可以在标题为的主题中找到答案 双击捕捉 上 QtCentre 论坛;
你可以有一个计时器。开始吧 releaseEvent处理程序中的计时器和 确保超时足够长 首先处理双击。 然后,在双击事件中 处理程序,你可以停止计时器和 防止它被射击。如果是双倍 单击处理程序未触发, 计时器将超时并调用一个插槽 你的选择,你可以在哪里处理 单击。这当然是一个 讨厌的黑客,但有机会工作。
wysota
您可以在标题为的主题中找到答案 双击捕捉 上 QtCentre 论坛;
你可以有一个计时器。开始吧 releaseEvent处理程序中的计时器和 确保超时足够长 首先处理双击。 然后,在双击事件中 处理程序,你可以停止计时器和 防止它被射击。如果是双倍 单击处理程序未触发, 计时器将超时并调用一个插槽 你的选择,你可以在哪里处理 单击。这当然是一个 讨厌的黑客,但有机会工作。
wysota
这是一个很好的用户界面设计,以确保您的单击和双击在概念上相关:
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
然后,您将设置用户失败。即使他们记得单击一下而不是一直双击,在双击或等待太久时,很容易意外地将鼠标移动太远。
编辑:
听到这个消息我很难过。
在这种情况下,我发现这两篇文章很有用:
使用PySide这是Qt 4.8的Python绑定我看到单击提供了一个 QEvent.MouseButtonPress
事件和双击提供单一 QEvent.MouseButtonPress
事件紧随其后的一个 QEvent.MouseButtonDblClick
。延迟大约是 100ms
在Windows上。这意味着如果您需要区分单击和双击,您仍然会遇到问题。
解决方案需要另一个 QTimer
延迟略高于内置延迟(增加一些开销)。如果你观察到了 QEvent.MouseButtonPress
事件你开始自己的计时器,如果超时只需单击一下。如果是 QEvent.MouseButtonDblClick
它是一个双击,你停止计时器,以避免单击计数。