Zusammenfassung:
Wenn ich im paint event innerhalb einer QGraphicsItem Klasse, die den Opacity Wert 0.5 hat 2 Pixmaps mit Opacity 1.0 und 0.2 zeichne - bekommen dann beide Pixmaps 0.5 aufgedrückt oder bleiben diese was ihre Opacity angeht eigenständig?
Nach meinem Verständnis müsste es eigentlich so sein das Pixmap 1 beim Darstellen im QWidget den Wert 0.5 bekommt und Pixmap 2 den Wert 0.1.
Aber nach meinen Versuchen letztes Wochenende werden beide Pixmaps grundsätzlich mit dem Opacity Wert der übergeordneten Klasse dargestellt. Was eigentlich ja nicht richtig sein kann, oder?
Details meines Problems:
Ich habe eine Klasse programmiert die mir abhängig vom Status 2 unterschiedliche QPixmap's darstellen soll.
Dies funktioniert auch prima. Mit .setOpacity(0.5); auf die gesammtklasse angewendet kann ich die gezeichneten QPixmaps auch wunderbar halbtransparent darstellen bzw. mit hilfe eines QTimers sanft ein oder ausblenden.
Nun möchte ich aber zusätzlich innerhalb meiner Klasse im paint event die beiden Bilder sanft in einander überblenden sobald sich der Status ändert.
Ich habe inzwischen mehrere Ansätze durchprobiert und dabei einige stunden und viele Haare verloren.
Was prima funktioniert ist dies hier:
Code: Alles auswählen
QPixmap PixAlpha = PixStatus1;
QPainter p(&PixAlpha);
p.fillRect(PixAlpha.rect(), QColor(LocBlende, LocBlende, LocBlende));
p.end();
PixStatus1.setAlphaChannel(PixAlpha);Nachteil: SEHR Rechenintensiv. Wird sogar in der Qt Dokumentation von abgeraten. Keine Praktikable lösung.
Viel lieber wäre mir ebenso wie für das gesammte Objekt für die beiden Pixmaps ganz bequem den Opacity wert zu setzen. Da diese Eigenschaft von QPixmap nicht unterstützt wird habe ich es über QPainter gelöst:
Code: Alles auswählen
QPainter p(&PixStatus1);
p.setOpacity (1.0/255*LocBlende);
p.end ();Oder ist der umweg über QPainter grundsätzlich falsch?