drawPie()具有自定义边框

时间:2013-10-10 05:17:51

标签: python qt pyqt4

是否可以在圆弧处绘制没有边框的饼形,但边框是直线?我附上了一张图片:

目前我已经通过首先使用drawPie()调用painter.setPen(QtCore.Qt.NoPen),然后使用QLineF根据饼形的中心和角度分别绘制线来实现此功能。 enter image description here

但问题是,如果角度不是90的倍数,则行位置不会与饼形同步。附上另一张显示问题的图片。

enter image description here

有一种简单/优雅的方法吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

假设您的自定义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__(角度作为类属性可能不是你想要的)但这就是想法。