我试图限制QGraphicsItem在父对象中的移动,该父对象继承自具有任意复杂形状(不是正方形)的QGraphicsPathItem。
正如我所理解的,我应该提取移动对象的每个点,并检查它们中的每个点是否没有包含在父QPainterPath中。 然后将父QPainterPath拆分为小的矩形多边形,并在每个子多边形的包围盒中限制移动区域。
因此,我想知道是否还有其他选择。 谢了。
如果QGraphicsItem move事件仍在QGraphicSpathItem中,也许您可以检查它。
检查本身,您可以使用这个QGraphicsItem方法来完成:
bool QGraphicsItem::collidesWithItem(const QGraphicsItem * other, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
为了确保该项仍然完全封闭在其父项中,请将模式设置为Qt::ContainSitemShape
如果为false,则将QGraphicsItem返回到其上一个位置
编辑:如果QGraphicsItems形状位于其他QGraphicsItems形状内,而不是其边界框内,则返回此检查。