如何在不丢失鼠标抓取的情况下将 QGraphicsItem 移动到另一个场景?

Posted

技术标签:

【中文标题】如何在不丢失鼠标抓取的情况下将 QGraphicsItem 移动到另一个场景?【英文标题】:How to move a QGraphicsItem to another scene without losing the mouse grab? 【发布时间】:2010-10-10 14:29:01 【问题描述】:

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

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

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

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

换句话说:

    QMousePress 发生在主场景中 在叠加场景中应该出现几个QMouseMoves,最后一个QMouseReleaseQMouseRelease 之后,该项目将被放回主场景

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于如何在不丢失鼠标抓取的情况下将 QGraphicsItem 移动到另一个场景?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不丢失 swift 精度的情况下将 String 转换为 Double [重复]

如何在不丢失 Xampp 中的数据的情况下将类型从 varchar 更改为 Date

如何在不丢失 exif 数据的情况下将 UIImage 转换为 JPEG?

如何在不丢失 css 的情况下将模板从桌面发送到移动设备

如何在不丢失值的情况下将 json 解析为 pandas 数据框? [复制]

如何在不丢失小数的情况下将数据框中的字符转换为数字