如何将QGraphicsItem移动到另一个场景而不会丢失鼠标抓取?

时间:2010-10-10 14:29:01

标签: c++ qt qgraphicsview qgraphicsitem

我有一个QGraphicsScene作为主要场景,其中有几个可移动的QGraphicsItem,另一个QGraphicsScene作为叠加层放在主场景的顶部。叠加场景与用户显示的大小完全相同,而主场景要大得多,因此需要自动上下滚动。

如果要移动主场景中的项目,我想从主场景中删除该项目并将其添加到叠加场景中,让用户在叠加场景中移动项目,并且鼠标被释放后将其放回主场景。这样,当项目接近显示边缘时,我可以平滑地自动滚动主场景。

问题如下;当一个项目从其场景中移除时,它会收到QMouseUngrab事件,因此无法在叠加场景中再次单击该项目时继续移动该项目。我试图阻止ungrab事件或在overlayscene中生成假QMousePress,但是没有一个解决了这个问题。

你知道我如何开始在一个场景中移动一个项目并继续在另一个场景中移动它而不会有任何中断吗?

换句话说:

  1. QMousePress发生在主场景中
  2. 多个QMouseMove,最后一个QMouseRelease应该在叠加层场景中发生
  3. QMouseRelease之后,该项目将被放回主场景

1 个答案:

答案 0 :(得分:1)

您可能需要做的是使用drag and drop framework。当鼠标离开初始画布时,您可以开始系统拖动,然后只要您的叠加场景接受您打包到QDrag中的mime数据,两者就可以互操作。

这是一个有点令人沮丧的系统,因为它在所有平台上提供最小公分母功能。但它允许您在一次操作中在两个小部件之间进行通信。