我有一个需要对单击和双击事件做出反应的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
那么您就是在让用户失败。即使他们始终记得单击与双击的区别,也很容易在双击时不小心移动鼠标太远或等待时间过长。
编辑:
很抱歉听到这个消息。
在这种情况下,我发现这两篇文章很有用:
QEvent.MouseButtonPress
事件,而双击则会紧接着触发一个QEvent.MouseButtonPress
事件和一个QEvent.MouseButtonDblClick
事件。在Windows上,这个延迟大约为100ms
。这意味着如果您需要区分单击和双击,仍然存在问题。QTimer
,其延迟略高于内置延迟(添加一些开销)。如果您观察到QEvent.MouseButtonPress
事件,则启动自己的计时器,在超时的情况下,它是单击。如果是QEvent.MouseButtonDblClick
,则是双击,并停止计时器以避免计为单击。