是否可以绘制一个在圆弧处没有边框但在直线处有边框的饼形?我在下面附上了一张图片:
目前我已经通过首先调用drawPie()
with来实现这一点painter.setPen(QtCore.Qt.NoPen)
,然后QLineF
根据饼形的中心和角度分别绘制线条。
但问题是,如果角度不是 90 的倍数,则线位置与饼形不同步。附上另一张显示问题的图片。
有没有简单/优雅的方法来做到这一点?谢谢!
假设您的自定义 Pie 是子类 QGraphicsRectItem,您可以尝试这样的事情:
class CustomPie(QtGui.QGraphicsRectItem):
angle = 2000
def paint(self, painter, option, widget):
# Create the path to draw the lines
path = QtGui.QPainterPath()
path.moveTo(self.rect().width()/2, self.rect().height()/2)
path.lineTo(self.rect().width(), self.rect().height()/2)
path.arcMoveTo(self.rect(), self.angle/16) # arcMoveTo in degrees
path.lineTo(self.rect().width()/2, self.rect().height()/2)
# draw a pie with no Pen
painter.setPen(QtGui.QPen(QtCore.Qt.NoPen))
painter.setBrush(QtGui.QBrush(QtCore.Qt.lightGray))
painter.drawPie(self.rect(), 0, self.angle)
# Draw the path with a custom Pen
painter.setPen(QtGui.QPen(QtCore.Qt.black, 2))
painter.drawPath(path)
这里我们重写paint
来绘制一个 Pie 和一个路径(实际上与您自己的方法非常相似)。您还必须覆盖__init__
(角度作为类属性可能不是您想要的),但这就是想法。