2015-09-06 34 views
1

https://www.dropbox.com/s/phven3rriv36893/graphicsview-pathitem.png?dl=0 不知形成区域徘徊,如果有一种方法,使我QGraphicsPathItem如在文档中看到mouseHoverEvents应对实际的曲线,而不是整个橙色区域。QGraphicsPathItem hoverEvents - 抑制由路径

https://www.dropbox.com/s/7m8w34nitp34sgf/pipes.png?dl=0 在我的应用程序,我没有看到,实际上形成了路径的面积和为此我只想当贝塞尔曲线盘旋一个hoverEnterEvent(当贝塞尔剩下的hoverLeaveEvent,当然)。

这是可能实现与QGraphicsPathItem或是一个完全错误的方法?如果是,如何?如果不是,QGraphics对象可以被视为替代品?

如果代码真的需要,请告诉我。

干杯, 迈克尔

回答

0

你需要重新实现QGraphicsItem.shape来回报您的曲线的更准确的表示。默认实现为您提供了您发现的边界框。

2

Tim Wakeham的回答是完全正确的:您需要重新实施shape()以为您的路径项目提供更详细的形状。然而,他的回答并不完全有用,因为实施返回正确的QPainterPath的好方法shape()并不是微不足道的。

它更令人困惑,因为在这种情况下,QGraphicsPathItem可以从其path()方法中提供QPainterPath。不幸的是,通常这不是从shape()方法返回的正确值,因为它绘制了项目而不是在其外部划定界限。

幸运的是,由于这是一个相当标准的要求,因此有一个内置类将路径转换为可用于形状的轮廓:QPainterPathStroker

下面是一些代码,我用它来做到这一点:

qp = QtGui.QPainterPathStroker() 
    qp.setWidth(MARGIN) 
    qp.setCapStyle(QtCore.Qt.SquareCap) 
    shape = qp.createStroke(self.path())