2013-10-10 2 views
1

원호에 테두리가없는 원형 모양을 그릴 수 있습니까? 테두리는 직선으로 나타 납니까? I는 화상 이하 첨부 : 맞춤 테두리가있는 drawPie()

현재 I 먼저 painter.setPen(QtCore.Qt.NoPen)drawPie() 전화 호출하고 나중에 별도로 원형 모양의 중심과의 각도에 기초하여, 선을 그리는 QLineF을 이용하여 구현 하였다.

그러나 각도가 90의 배수가 아닌 경우 줄 위치가 원형과 동기화되지 않는 것이 문제입니다. 문제를 나타내는 다른 그림을 첨부했습니다.

enter image description here

이 작업을 수행 할 수있는 간단한/우아한 방법이 있나요? 감사합니다.

답변

0

서브 클래 싱 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 우선합니다. 마찬가지로 __init__을 오버라이드해야합니다 (클래스 속성으로서의 각도는 원하는 것이 아닐 수도 있습니다).하지만 그 생각입니다.

+0

감사합니다. Yoann! 나는 당신의 방법을 시도했지만 90의 배수가 아닌 각도에 관해서도 같은 문제에 직면했다. 솔리드 브러시로 drawPie()를 호출하고 QPainterPath를 사용하여 바깥 경계 위에 흰색 원을 그려서 사라지게했다. –