2013-10-10 3 views
1

Можно ли нарисовать форму пирога без рамки на дуге, но с границами по прямым линиям? Я приложил изображение ниже:drawPie() с пользовательскими границами

В настоящее время я реализовал это на первый вызов вызова drawPie() с painter.setPen(QtCore.Qt.NoPen), а затем с помощью QLineF, чтобы рисовать линии отдельно на основе центра и углах формы пироги. enter image description here

Но проблема в том, что положение линии не синхронизируется с формой пирога, если углы не кратные 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

Thanks Yoann! Я попробовал свой метод, но столкнулся с той же проблемой, когда речь идет о углах, которые не кратные 90. Я закончил вызов drawPie() сплошной кистью и рисовал белый круг над внешней границей, используя QPainterPath, чтобы он исчез. –

Смежные вопросы