1

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

如果要移动主场景中的某个项目,我想从主场景中删除该项目并将其添加到覆盖场景中,让用户在覆盖场景中移动该项目,并且只要释放鼠标把它放回主场景。这使我可以在项目接近显示边缘时平滑地自动滚动主场景。

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

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

换句话说:

  1. QMousePress发生在主场景
  2. 在叠加场景中应该发生几个QMouseMoves 和最后一个QMouseRelease
  3. 项目之后QMouseRelease将立即放回主场景
4

1 回答 1

1

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

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

于 2011-10-14T03:50:14.473 回答