• 11128阅读
  • 6回复

一个关于QGraphicsItem鼠标事件的问题[已解决][又添新问题] [复制链接]

上一主题 下一主题
离线sbtree
 
只看楼主 倒序阅读 楼主  发表于: 2010-07-06
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
环境:Vista, VC++ 2008, Qt 4.5.2
问题描述:使用Graphics Scene View框架自定义一个Item,重载了3个鼠标事件函数。把Item加入到scene中,设置不可见,当scene中的某个其他Item在鼠标按下被选中后设置可见,并将该Item置位最顶层,此时鼠标正好在该Item上,保持鼠标按下状态,移动鼠标,此时该对象的鼠标移动函数不响应,鼠标释放事件存在一样的问题。我的问题是如何让鼠标移动和释放事件在这种情况下也能响应?
[ 此帖被sbtree在2010-07-08 15:58重新编辑 ]
windows 7 + VC++2008 + Qt4.5.2
离线sbtree
只看该作者 1楼 发表于: 2010-07-06
尝试了一个曲线救国的方法(不完整版):
scene的selectionChanged的响应槽中把该Item设置为被选中的item的事件过滤器,并重载了该item的sceneEventFilter函数,过滤3个鼠标事件,基本实现需求,可是一个问题是,在某个Item被选中时安装过滤器太晚了,被选中的Item的鼠标按下事件将无法接收到
windows 7 + VC++2008 + Qt4.5.2
离线抠涕
只看该作者 2楼 发表于: 2010-07-07
你是要做 Drag and Drop 么
是的话, 助手里有专门讲这个的。
离线sbtree
只看该作者 3楼 发表于: 2010-07-07
引用第2楼抠涕于2010-07-07 10:57发表的  :
你是要做 Drag and Drop 么
是的话, 助手里有专门讲这个的。


我不做Drag and Drop,我是想实现一个Item的代理类,通过设置该类为某个Item对象的代理,而实现通过鼠标操作来改变大小等功能
windows 7 + VC++2008 + Qt4.5.2
离线sbtree
只看该作者 4楼 发表于: 2010-07-07
上个图形

完善了一下曲线救国的方法,已基本达到了需求。方法是在sceneEventFilter将第一次接收到的鼠标移动事件的时候,执行一次鼠标按下事件函数
windows 7 + VC++2008 + Qt4.5.2
离线抠涕
只看该作者 5楼 发表于: 2010-07-07
额    .
离线sbtree
只看该作者 6楼 发表于: 2010-07-08
目前还有几个问题有待解决
1。如何处理事件,例如当前被选中的Item重载了mouseDoubleClickEvent,如果把代理Item置于顶层,被选中的Item就不能接收到mouseDoubleClickEvent
2。安装事件过滤器不是一个彻底的解决办法,在某些情况下,scene的事件函数可能会对某些Item做了预处理,恰好这些Item又是被选中的,scene对当前鼠标点的Item就会被误判断为代理Item
windows 7 + VC++2008 + Qt4.5.2
快速回复
限100 字节
 
上一个 下一个