【发布时间】:2018-10-10 18:15:13
【问题描述】:
我需要精确检测矩形项目与另一个具有贝塞尔曲线形状的项目之间的碰撞。目前,当我将矩形与贝塞尔曲线形状的底部碰撞时,正确检测到碰撞。但是当我在贝塞尔曲线形状内移动矩形时,也会检测到碰撞,尽管这些项目没有碰撞。我想获得这两个项目之间的精确碰撞。我不明白我在哪里做错了。
class RectangleItem(QGraphicsRectItem):
def __init__(self, *args):
super().__init__(*args)
self.setFlag(QGraphicsItem.ItemIsMovable)
self.setPen(QPen(Qt.cyan))
class CurveItem(QGraphicsItem):
def __init__(self):
super().__init__()
self.path = self._setupPath()
def paint(self, painter, styles, widget=None):
painter.drawPath(self.path)
def boundingRect(self):
return self.path.boundingRect()
def shape(self):
return self.path
def _setupPath(self):
path = QPainterPath()
p1 = QPointF(0, 100)
p2 = QPointF(400, 100)
c = QPointF(200, 800)
path.moveTo(p1)
path.quadTo(c, p2)
return path
class Scene(QGraphicsScene):
def __init__(self):
super().__init__()
self.curve_item = CurveItem()
self.addItem(self.curve_item)
self.rectangle_item = RectangleItem(0, 0, 50, 50)
self.addItem(self.rectangle_item)
def mouseMoveEvent(self, e):
print(self.collidingItems(self.curve_item))
super().mouseMoveEvent(e)
【问题讨论】:
标签: python pyqt pyqt4 pyqt5 qgraphicsitem