Differences between revisions 1 and 5 (spanning 4 versions)
Revision 1 as of 2009-11-01 00:22:50
Size: 73
Editor: snifi
Comment:
Revision 5 as of 2009-11-05 22:41:05
Size: 2707
Editor: snifi
Comment:
Deletions are marked like this. Additions are marked like this.
Line 6: Line 6:

attachment:sektorivalikko001.png

== Satunnaista koodia ==

{{{#!python
class SectorMenu(QGraphicsItem):
  def __init__(self, position, scene, matrix=QMatrix(),parent=None):
    super(SectorMenu, self).__init__()
    self.penW=2
    self.parent=parent
    self.setFlags(QGraphicsItem.ItemIsSelectable|
            QGraphicsItem.ItemIsFocusable)
    self.innerRadius=16.0
    self.outerRadius=42.0
    r=self.innerRadius
    R=self.outerRadius
    self.outerRect=QRectF(-R, -R, 2*R, 2*R)
    self.innerRect=QRectF(-r, -r, 2*r, 2*r)
    self.sectors=self.calcSectors()
    self.setPos(position)
    #self.setPos(QPointF(0.0,0.0))
    self.setMatrix(matrix)
    scene.clearSelection()
    scene.addItem(self)
    self.setSelected(True)
    self.setFocus()
    self.setAcceptsHoverEvents(True)

  def calcSectors(self):
    sectors=[]
    for start,angle in [(0,60),(70,60),(140,60),(210,60),(280,60)]:
      startAngle = start#*16
      spanAngle = angle#*16
      # go radians
      start=pi*start/180
      angle=pi*angle/180
      r=self.innerRadius+self.penW/2.0
      R=self.outerRadius-self.penW/2.0
      #x=position.x(); y=position.y()
      x=0.0; y=0.0
      P1=QPointF(x+r*cos(start),y-r*sin(start))
      P2=QPointF(x+R*cos(start),y-R*sin(start))
      P3=QPointF(x+r*cos(start+angle),y-r*sin(start+angle))
      P4=QPointF(x+R*cos(start+angle),y-R*sin(start+angle))
      #sectors.append((startAngle, spanAngle, P1,P2,P3,P4))
      # find the path:
      path=QPainterPath()
      path.moveTo(P1)
      path.lineTo(P2)
      path.arcTo(self.outerRect, startAngle, spanAngle)
      #path.arcTo(self.innerRect, startAngle, spanAngle)
      #path.moveTo(P3)
      path.lineTo(P4)
      #path.arcTo(self.outerRect, startAngle, spanAngle)
      path.arcTo(self.innerRect, startAngle+spanAngle, -spanAngle)
      sectors.append(path)
    return sectors

  def shape(self):
    path=QPainterPath()
    for s in self.sectors:
      path.addPath(s)
    return path

  def boundingRect(self):
    return self.outerRect
  
      
  def hoverMoveEvent(self, event):
    print "hoverMoveEvent ", random.uniform(-100,100)


  def paint(self, painter, option, widget):
    pen = QPen(Qt.SolidLine)
    pen.setColor(aiColor(idx=22))
    pen.setWidth(self.penW)
    painter.setPen(pen)
    i=0
    #for startAngle,spanAngle,P1,P2,P3,P4 in self.sectors:
    for s in self.sectors:
      i+=3
      pen.setColor(aiColor(idx=i));painter.setPen(pen)
      painter.setBrush(aiColor(idx=i))
      painter.strokePath(s,pen)
      painter.drawPath(s);

} } }

QtSektorivalikko

Tavoite

Komponentti sektorivalikolle.

attachment:sektorivalikko001.png

Satunnaista koodia