QGraphicsPathItem hoverEvents - 禁止在路径形成的区域上悬停
QGraphicsPathItem hoverEvents - suppress hover on area formed by the path
https://www.dropbox.com/s/phven3rriv36893/graphicsview-pathitem.png?dl=0
我想知道是否有办法让我的 QGraphicsPathItem 响应 mouseHoverEvents 到实际曲线而不是文档中看到的整个橙色区域。
https://www.dropbox.com/s/7m8w34nitp34sgf/pipes.png?dl=0
在我的应用程序中,我没有看到实际形成路径的区域,因此当贝塞尔曲线悬停时我只想要一个 hoverEnterEvent(当然,当贝塞尔曲线离开时我想要一个 hoverLeaveEvent)。
这是否可以通过 QGraphicsPathItem 实现,或者这是一种完全错误的方法?如果是,如何?如果不是,什么 QGraphics 对象可以被认为是替代品?
如果确实需要代码,请告诉我。
干杯,
迈克尔
您需要重新实现 QGraphicsItem.shape
以 return 更准确地表示您的曲线。默认实现为您提供了您所发现的边界框。
Tim Wakeham 的回答是完全正确的:您需要重新实现 shape()
来为您的路径项提供更详细的形状。然而,他的回答并不是完全有用,因为实现一个好的 shape()
方法 return 正确 QPainterPath
.
并非易事
更令人困惑,因为在这种情况下,QGraphicsPathItem
已经可以从其 path()
方法中提供 QPainterPath
。不幸的是,这通常不是 shape()
方法 return 的正确值,因为它绘制项目而不是界定其外部。
幸运的是,由于这是一个相当标准的要求,因此有一个内置的 class 可以将路径转换为可用于形状的轮廓:QPainterPathStroker
.
这是我用来执行此操作的一些代码:
qp = QtGui.QPainterPathStroker()
qp.setWidth(MARGIN)
qp.setCapStyle(QtCore.Qt.SquareCap)
shape = qp.createStroke(self.path())
https://www.dropbox.com/s/phven3rriv36893/graphicsview-pathitem.png?dl=0 我想知道是否有办法让我的 QGraphicsPathItem 响应 mouseHoverEvents 到实际曲线而不是文档中看到的整个橙色区域。
https://www.dropbox.com/s/7m8w34nitp34sgf/pipes.png?dl=0 在我的应用程序中,我没有看到实际形成路径的区域,因此当贝塞尔曲线悬停时我只想要一个 hoverEnterEvent(当然,当贝塞尔曲线离开时我想要一个 hoverLeaveEvent)。
这是否可以通过 QGraphicsPathItem 实现,或者这是一种完全错误的方法?如果是,如何?如果不是,什么 QGraphics 对象可以被认为是替代品?
如果确实需要代码,请告诉我。
干杯, 迈克尔
您需要重新实现 QGraphicsItem.shape
以 return 更准确地表示您的曲线。默认实现为您提供了您所发现的边界框。
Tim Wakeham 的回答是完全正确的:您需要重新实现 shape()
来为您的路径项提供更详细的形状。然而,他的回答并不是完全有用,因为实现一个好的 shape()
方法 return 正确 QPainterPath
.
更令人困惑,因为在这种情况下,QGraphicsPathItem
已经可以从其 path()
方法中提供 QPainterPath
。不幸的是,这通常不是 shape()
方法 return 的正确值,因为它绘制项目而不是界定其外部。
幸运的是,由于这是一个相当标准的要求,因此有一个内置的 class 可以将路径转换为可用于形状的轮廓:QPainterPathStroker
.
这是我用来执行此操作的一些代码:
qp = QtGui.QPainterPathStroker()
qp.setWidth(MARGIN)
qp.setCapStyle(QtCore.Qt.SquareCap)
shape = qp.createStroke(self.path())