ich bin wieder mal dabei, mein kleines Icon-Programm weiter zu schreiben und habe da nun ein unschönes Zeichenproblem:
Zwei Icons werden durch eine gezeichnete Relation verbunden. Sobald ich nun eines der beiden Icons umherschiebe, hinterlässt die dazugehörige Relation Rückstände auf der Zeichenfläche, obwohl ich meiner Meinung nach den Painter korrekt setze.
Das Problem besteht meiner Meinung nach vielleicht darin, dass ich die areaPoints() nur einmal setze, die Paintergröße sich ja aber ständig ändert (je nach Abstand der beiden Icons zueinander). Wie gehe ich damit richtig um?
Hier der Quellcode (in Python):
Code: Alles auswählen
class RelationItem(QCanvasPolygonalItem):
def __init__(self, pItem, cItem, canvas):
QCanvasPolygonalItem.__init__(self, canvas)
self.parentItem = pItem
self.childItem = cItem
self.relRTTI = 432506
def itemMidX(self, thisItem):
return (thisItem.x() + (thisItem.width()/2))
def itemMidY(self, thisItem):
return (thisItem.y() + (thisItem.image.height() / 2))
def rtti(self):
return self.relRTTI
def areaPoints(self):
res = QPointArray(4)
point = []
point.append(QPoint(self.itemMidX(self.parentItem), self.itemMidY(self.parentItem)))
point.append(QPoint(self.itemMidX(self.childItem) , self.itemMidY(self.parentItem)))
point.append(QPoint(self.itemMidX(self.childItem) , self.itemMidY(self.childItem)))
point.append(QPoint(self.itemMidX(self.parentItem), self.itemMidY(self.childItem)))
for counter in range(4):
res.setPoint(counter, point[counter])
return res
def drawShape(self, p):
self.move(self.itemMidX(self.parentItem), self.itemMidY(self.parentItem))
if self.itemMidY(self.parentItem) > self.itemMidY(self.childItem):
self.setY(self.itemMidY(self.childItem))
if self.itemMidX(self.parentItem) > self.itemMidX(self.childItem):
self.setX(self.itemMidX(self.childItem))
p.setPen(QPen(Qt.gray, 1, Qt.SolidLine))
p.setBackgroundMode(Qt.OpaqueMode)
p.drawLine(self.itemMidX(self.parentItem), self.itemMidY(self.parentItem),
self.itemMidX(self.childItem), self.itemMidY(self.parentItem))
p.drawLine(self.itemMidX(self.childItem), self.itemMidY(self.parentItem),
self.itemMidX(self.childItem), self.itemMidY(self.childItem))
MfG Heiko