2010-10-10 60 views
1

我有一个QGraphicsScene作为主场景,其中有几个可移动的QGraphicsItem s和另一个QGraphicsScene作为叠加层。叠加场景与用户的显示器尺寸完全相同,而主场景要大得多,因此需要自动上下滚动。如何将QGraphicsItem移动到另一个场景而不会丢失鼠标?

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

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

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

换句话说:

  1. QMousePress发生在主场景
  2. 几个QMouseMove秒和最终一个QMouseRelease应在覆盖场景
  3. 权发生QMouseRelease后,该项目将被放回主场景

回答

1

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

这是一个有点令人沮丧的系统,因为它提供了所有平台上最不共同的分母功能。但它可以让你在一个操作中在两个小部件之间进行通信。

相关问题