Qt4: halbtransparente Widgets

Alles rund um die Programmierung mit Qt
geisterfahrer
Beiträge: 10
Registriert: 11. August 2004 11:36
Wohnort: Achim bei Bremen

Beitrag von geisterfahrer »

Was hätte der Lösungsansatz auch groß verändern sollen? Das Widget ist zwar rund, aber an der eigentlichen Problematik mit dem Hintergrund ändert sich gar nichts.
Auf dem Screenshot wird eben wie von dir beschrieben eine Maske gesetzt und an der gleichen Stelle, wo das Widget undurchsichtig in paintEvent der Kreis draufgezeichnet. Wenn ich die Geschichte mit dem PaintEvent weglasse, sieht man eben den blaßen roten Hintergrund, wie er auch schon in einem meiner älteren Beiträge zu sehen ist. Auf dem anderen Screenshot ist zu sehen, wie ich bei der Masken-Pixmap eine halbdurchsichtige Farbe gesetzt habe. Ist zwar halbdurchsichtig, aber nur durch die Punktierung...
Dateianhänge
qt43.png
qt43.png (4.42 KiB) 4115 mal betrachtet
qt44.png
qt44.png (5.35 KiB) 4115 mal betrachtet
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Nun ja, qt44.png sieht schon besser aus... Um das Problem entgültig zu lösen, musst du statt deinen Kreis in dem Widget zu zeichen, es mit einem QImage probieren. anschließend konvertierst du QImage in QPixmap und zeichnest dieses mit dem "Haupt"-painter... dann müsste es klappen...

etwa so:

Code: Alles auswählen

QImage kreis(radius, radius);
QPainter p(&kreis);
p->drawKreis()...
QPixmap pixKreis= kreis;

painterAusDemPaintEvent->drawPixmap(); // :)  
geisterfahrer
Beiträge: 10
Registriert: 11. August 2004 11:36
Wohnort: Achim bei Bremen

Beitrag von geisterfahrer »

Mit der Maske hab ich das Widget an einigen Stellen durchlässig gemacht und an anderen Stellen überhaupt nicht. Egal wie und was ich dann auf das Widget raufzeichnen lasse, entweder sieht man das gar nicht, oder voll. Was nun der Wechsel von QImage -> QPixmap für eine wundervolle Wendung vollbringen soll, ist mir schleierhaft - woher sollte das Image aufeinmal den durchsichtbaren Hintergrund herhaben? Das entzieht sich meiner Logik.
Ich habs trotzdem ausprobiert - und brachte gar nichts.
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

also dass nenn ich mal improvisiert, alle achtung :shock:
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

der Wechsel von QImage auf QPixmap soll auch nix bringen, das ist nur eine Frage der Effizienz, man kann natürlich auch QImage mit derawImage() zeichnen... Wichtig ist, dass ich ein halb transparentes Bild habe und dieses zeichne... Das müsste doch gehen oder...
Wenn irgendwas nicht funktioniert, dann bitte Code ins Studio....

Und nicht verzweifeln, Genosse, das wird schon.. :)
lepsai
Beiträge: 573
Registriert: 14. September 2004 21:33
Wohnort: Berlin
Kontaktdaten:

Beitrag von lepsai »

Ne, jetzt darfst du doch verzweifeln... Das ganze kann gar nicht gehen, jedenfalls nicht mit Qt 3, da wir nix gegen Widget-background machen können... Das hab ich verpeilt... Ich benutze bei meinen Sachen eine Overlaytechnik, mit der man sowas erreichen kann, aber in deinem Fall ist es doch kompliziert anzuwenden...

Also, schau dir grabWidget() oder QPainter::redirect() an. Das lässt sich anwenden, wenn du nur irgend was darstellen möchtest. Eine schöne Lösung ist es aber nicht...

Ansonsten muss man klären, warum das hochgelobte alpha blending von QT 4 nicht funktioniert. Ich arbeite noch mit QT3 und kann daher dabei nicht helfen...
Antworten