【发布时间】:2013-08-04 00:10:32
【问题描述】:
我被 QGraphicsScene 覆盖并重载了 2 个方法:mouseDoubleClickEvent 和 mouseReleaseEvent。我想在每个事件上执行不同的逻辑,但我不知道如何区分?至少 1 个mouseReleaseEvent 出现在mouseDoubleClickEvent 之前。
【问题讨论】:
我被 QGraphicsScene 覆盖并重载了 2 个方法:mouseDoubleClickEvent 和 mouseReleaseEvent。我想在每个事件上执行不同的逻辑,但我不知道如何区分?至少 1 个mouseReleaseEvent 出现在mouseDoubleClickEvent 之前。
【问题讨论】:
对于您希望在双击时发生的逻辑,将代码放入 mouseDoubleClickEvent() 中,对于您希望在鼠标释放时发生的逻辑,将代码放入 mouseReleaseEvent() 中。
如果您想在用户单击但不双击时执行某些操作,则必须等待查看他们是否单击了两次。在第一次释放鼠标时,启动一个 200 毫秒的计时器。
如果您在计时器到期之前收到mouseDoubleClickEvent(),那么这是一次双击,您可以执行双击逻辑。如果计时器在您收到另一个 mouseDoubleClick() 之前到期,那么您知道这是一次单击。
伪代码
main()
{
connect(timer, SIGNAL(timeout()), this, SLOT(singleClick()));
}
mouseReleaseEvent()
{
timer->start();
}
mouseDoubleClickEvent()
{
timer->stop();
}
singleClick()
{
// Do single click behavior
}
This 的回答给出了一个相当相似的解决方案。
【讨论】: