Wie kann das umständliche Übermalen von Delegate-Zeilen in einem QTreeView verfeinert werden?Python

Python-Programme
Guest
 Wie kann das umständliche Übermalen von Delegate-Zeilen in einem QTreeView verfeinert werden?

Post by Guest »

Im Zentrum meiner Python/Qt-Anwendung steht eine tabellarische Ansicht mit QTreeView. In einer Spalte habe ich Sparklines implementiert, indem ich eine Unterklasse von QStyledItemDelegate bildete, die Datenelemente in der entsprechenden Spalte als Numpy-Arrays festlegte und diese in der Paint-Methode des Delegaten darstellte.
Meine Liniendiagramme gehen leicht über die Begrenzungsrahmen hinaus, aber dieser Effekt gefällt mir (und ich möchte ihn behalten):
Image

Wenn ich jedoch nach unten streiche, kommt es zu etwas Neulackierung und irgendwie auch zu einer Neulackierung des Hintergrunds, was zu einem führt Temporäres Bild, bei dem der neutrale Hintergrund die übermalten Linien auflöst:
Image

Wenn ich das Fenster verlasse oder die Kopfzeile berühre, erfolgt erneut ein Neuanstrich, zurück zum ersten Bild.
Fragen
Wie und wo findet diese Neugestaltung des Hintergrunds statt und was kann ich tun, um sie zu beeinflussen? Ich bin überrascht, weil mein Benutzercode die Malmethode des Delegaten überschreibt und nur Linien zeichnet.
Meine Malmethode

Code: Select all

def paint(self, painter, option, index):

data = index.data(UserRole+1)
rectF = option.rect.toRectF()
ndims = self.ndims
yscale = self.yscale

midHeight = rectF.top() + rectF.height()/2
ctrLine = QtCore.QLineF( rectF.left(), midHeight,
rectF.right(), midHeight )
painter.setPen( self.midPen )
painter.drawLine( ctrLine )

painter.setPen( self.linePen )

segWidth = rectF.width() / (ndims-1)
for s in range(ndims-1):
seg = data[s:s+2]
segProj = -seg / yscale * rectF.height()
segLine = QtCore.QLineF( rectF.left() + s*segWidth,
midHeight + segProj[0],
rectF.left() + (s+1)*segWidth,
midHeight + segProj[1]  )
painter.drawLine( segLine )
Ich habe versucht, item.setBackground(brush) entweder mit einer undurchsichtigen oder einer transparenten QColor festzulegen. Keines davon hat etwas bewirkt, da mein Farbcode niemals eine Hintergrundmalerei aufruft.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post