2015-09-06 89 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())