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对象可以被视为替代?
如果真的需要代码,请告诉我。
干杯, 迈克尔
答案 0 :(得分:3)
shape()
,为你的路径项提供更详细的形状。但是,他的回答并不完全有用,因为实现一个返回右shape()
的好QPainterPath
方法并非易事。
它更令人困惑,因为在这种情况下,QGraphicsPathItem
已经可以从QPainterPath
方法提供path()
。不幸的是,从shape()
方法返回通常不是正确的值,因为它绘制项目而不是在其外部划分。
幸运的是,由于这是一个相当标准的要求,因此有一个内置类可以将路径转换为可用于形状的轮廓:QPainterPathStroker
。
这是我用来做的一些代码:
qp = QtGui.QPainterPathStroker()
qp.setWidth(MARGIN)
qp.setCapStyle(QtCore.Qt.SquareCap)
shape = qp.createStroke(self.path())
答案 1 :(得分:0)
您需要重新实现QGraphicsItem.shape
才能更准确地表示曲线。默认实现为您提供了已发现的边界框。