提问者:小点点

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


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

正如我所理解的,我应该提取移动对象的每个点,并检查它们中的每个点是否没有包含在父QPainterPath中。 然后将父QPainterPath拆分为小的矩形多边形,并在每个子多边形的包围盒中限制移动区域。

因此,我想知道是否还有其他选择。 谢了。


共1个答案

匿名用户

如果QGraphicsItem move事件仍在QGraphicSpathItem中,也许您可以检查它。

检查本身,您可以使用这个QGraphicsItem方法来完成:

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

为了确保该项仍然完全封闭在其父项中,请将模式设置为Qt::ContainSitemShape

如果为false,则将QGraphicsItem返回到其上一个位置

编辑:如果QGraphicsItems形状位于其他QGraphicsItems形状内,而不是其边界框内,则返回此检查。