限制多边形区域内 QGraphicsItem 的移动区域

Restrict movement area of QGraphicsItem inside of polygon area

我试图限制 QGraphicsItem 在继承自 QGraphicsPathItem 的具有任意复杂形状(不是正方形)的父对象内的移动。

据我了解,我应该提取移动对象的每个点并检查它们中的每一个是否不包含在父QPainterPath中。然后将父QPainterPath分割成小矩形多边形,并在每个子多边形的边界框中限制运动区域。

所以,我想知道是否还有其他选择。谢谢。

也许您可以检查 QGraphicsItem 移动事件是否仍在 QGraphicsPathItem 中。

检查本身,你可以这样做 QGraphicsItem method:

bool QGraphicsItem::collidesWithItem(const QGraphicsItem * other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const

并且要确保该项目仍然完全包含在其父项中,请将 mode 设置为 Qt::ContainsItemShape

如果为假,return QGraphicsItem 到它之前的位置

编辑:此检查 returns 如果 QGraphicsItems shape 在其他 QGraphicsItems shape 内,而不是它的边界框。