• 2698阅读
  • 2回复

关于graphicsscene的事件传递的问题 [复制链接]

上一主题 下一主题
离线firerun
 

只看楼主 倒序阅读 楼主  发表于: 2013-05-17

我想实现下面的功能:当鼠标双击在item上时,item处理事件,scene不做任何处理。
当鼠标双击在scene上时,scene上添加一个item。

下面把我的实现简单写下,因为不能贴代码
scene::mouseDoubleClickedEvent(QGraohicsSceneMouseEvent *e)
{
      QGraohicsScene::mouseDoubleClickedEvent(e);
      if (!e->isAccepted())
     {
           // 添加控件 在 e->buttonDownScenePos()
    }
}


item::mouseDoubleClickedEvent(QGraohicsSceneMouseEvent *e)
{
    // do something...
    e->accept()
}


现在的问题是,当以下操作顺序执行时会出错
双击scene创建一个item () //  执行正确
双击item // 执行正确
双击scene // 执行错误,获取到的 e->buttonDownScenePos() 是上一个操作的位置。
离线firerun

只看该作者 1楼 发表于: 2013-05-17
然后再双击scene // 获取到的还是双击item那里的位置
好像scene的那个时间堵在那里了。
离线firerun

只看该作者 2楼 发表于: 2013-05-17
就是说当鼠标在item上双击过后
之后无论双击在scene上的什么位置,获取到的e->buttonDownScenePos()  都是你点击item那一次的场景位置。

当你再点一次任何一个item,之后无论双击在scene上的什么位置,获取到的e->buttonDownScenePos()  都是你最近一次点击item的场景位置。
快速回复
限100 字节
 
上一个 下一个