Qt4: halbtransparente Widgets
-
geisterfahrer
- Beiträge: 10
- Registriert: 11. August 2004 11:36
- Wohnort: Achim bei Bremen
Qt4: halbtransparente Widgets
Folgender Satz steht in der Dokumentation von Qt4 unter "Porting to Qt 4":
"Widget background painting has been greatly improved, supporting flickerfree updates and making it possible to have half transparent widgets."
Wie bekommt man das mit den halbtransparenten Widgets hin? Ich hab testweise versucht einem Widget QPalette mit einer durchsichtigen Farbe unterzujubeln, aber statt das Widget unter dem Widget zu sehen, mischt er meine Hintergrundfarbe mit dem Standardhintergrund. War der Satz aus der Dokumentation nur für QStyle zu gelten? Denn dort scheint es auf einem transparentn Hintergrund zu zeichnen kein Problem zu sein. Aber nur um einen transparenten Hintergrund zu haben meinem Widget eine eigene QStyle Klasse unterjubeln? Der Aufwand erscheint mir nicht ganz angemessen..
Kennt jemand eine Möglichkeit ein völlig durchsichtiges Widget zu bekommen auf möglichst einfache Art und Weise?
"Widget background painting has been greatly improved, supporting flickerfree updates and making it possible to have half transparent widgets."
Wie bekommt man das mit den halbtransparenten Widgets hin? Ich hab testweise versucht einem Widget QPalette mit einer durchsichtigen Farbe unterzujubeln, aber statt das Widget unter dem Widget zu sehen, mischt er meine Hintergrundfarbe mit dem Standardhintergrund. War der Satz aus der Dokumentation nur für QStyle zu gelten? Denn dort scheint es auf einem transparentn Hintergrund zu zeichnen kein Problem zu sein. Aber nur um einen transparenten Hintergrund zu haben meinem Widget eine eigene QStyle Klasse unterjubeln? Der Aufwand erscheint mir nicht ganz angemessen..
Kennt jemand eine Möglichkeit ein völlig durchsichtiges Widget zu bekommen auf möglichst einfache Art und Weise?
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
-
geisterfahrer
- Beiträge: 10
- Registriert: 11. August 2004 11:36
- Wohnort: Achim bei Bremen
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
-
geisterfahrer
- Beiträge: 10
- Registriert: 11. August 2004 11:36
- Wohnort: Achim bei Bremen
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Verstehe, also die Message Windows sollten transparent einzustellen sein. Zumindest war das in der 0.9.x so. Ansonsten gibts glaube ich nur noch für das MainWin transparentz, aber da könnte ich mich auch irren.
Steht denn nix davon in den Optionen? Mehr kann ich dazu auswendig leider nicht sagen, denn ich benutze Sim nicht mehr.
Steht denn nix davon in den Optionen? Mehr kann ich dazu auswendig leider nicht sagen, denn ich benutze Sim nicht mehr.
-
geisterfahrer
- Beiträge: 10
- Registriert: 11. August 2004 11:36
- Wohnort: Achim bei Bremen
Ahja, hab die Option Transparenz gefunden, aber die bietet eine ganz andere Funktion, als ich sie haben wollte: Sie zeigt den Desktophintergrund an. Ich will nur das darunter liegende Widget sehen (also meins und nicht irgendwelche Fremdsachen).
Achja, ergänzend wollte ich erwähnen, dass nicht das ganze Widget, also auch das was ich zeichne, nicht transparent sein soll, sondern nur der Hintergrund des Widgets soll vollkommen durchsichtig sein.
Achja, ergänzend wollte ich erwähnen, dass nicht das ganze Widget, also auch das was ich zeichne, nicht transparent sein soll, sondern nur der Hintergrund des Widgets soll vollkommen durchsichtig sein.
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
-
geisterfahrer
- Beiträge: 10
- Registriert: 11. August 2004 11:36
- Wohnort: Achim bei Bremen
Also ich möchte ein Widget so haben, das es keine leere graue Fläche als Hintergrund hat, sondern einen durchsichtigen Hintergrund hat, also das Widget was dahinter liegt zu sehen ist. Aber das was ich dann ins Widget reinzeichne soll natürlich sichtbar sein und soll die Möglichkeit haben halbtransparent zu sein.
Auf dem Screenshot soll der rote Rahmen das Widget markieren. Wie man sieht, ist es dort wo nichts gezeichnet wurde vollkommen durchsichtig und man sieht den Button unverfälscht. Der Kreis ist in dieses Widget reingezeichnet worden und hat von der Möglichkeit von Qt4 einen Alpha Kanal anzugeben gebrauch gemacht.
Nochmal zu meinem Problem: Wenn ich dem Widget sage, er soll als Hintergrundfarbe eine transparente Farbe als Hintergrund haben, zeichnet er diese auch habltransparent, aber von irgendwo her kommt doch noch immer die graue Hintergrundfarbe mit der er mischt. Zu sehen auf dem zweiten Screenshot. Hier der Code aus dem Konstruktors:
QPalette palette( QApplication::palette() );
palette.setColor( backgroundRole(), QColor( 255, 0, 0, 10 ) );
setPalette(palette);
Wie man sieht, malt er das knallige Rot zwar sehr durchsichtig, aber der Button im Hintergrund ist dennoch nicht zu sehen.
Ermöglichen will ich sowas wie auf dem ersten Screenshot zu sehen: http://doc.trolltech.com/4.0/widgets-styles.html
Gut zu sehen an der ComboBox oder an dem Fortschrittsbalken. Nur sowas möchte ich eben auch auf QWidget Ebenene können und nicht meine eigene QStyle Klasse bauen.
Auf dem Screenshot soll der rote Rahmen das Widget markieren. Wie man sieht, ist es dort wo nichts gezeichnet wurde vollkommen durchsichtig und man sieht den Button unverfälscht. Der Kreis ist in dieses Widget reingezeichnet worden und hat von der Möglichkeit von Qt4 einen Alpha Kanal anzugeben gebrauch gemacht.
Nochmal zu meinem Problem: Wenn ich dem Widget sage, er soll als Hintergrundfarbe eine transparente Farbe als Hintergrund haben, zeichnet er diese auch habltransparent, aber von irgendwo her kommt doch noch immer die graue Hintergrundfarbe mit der er mischt. Zu sehen auf dem zweiten Screenshot. Hier der Code aus dem Konstruktors:
QPalette palette( QApplication::palette() );
palette.setColor( backgroundRole(), QColor( 255, 0, 0, 10 ) );
setPalette(palette);
Wie man sieht, malt er das knallige Rot zwar sehr durchsichtig, aber der Button im Hintergrund ist dennoch nicht zu sehen.
Ermöglichen will ich sowas wie auf dem ersten Screenshot zu sehen: http://doc.trolltech.com/4.0/widgets-styles.html
Gut zu sehen an der ComboBox oder an dem Fortschrittsbalken. Nur sowas möchte ich eben auch auf QWidget Ebenene können und nicht meine eigene QStyle Klasse bauen.
- Dateianhänge
-
- qt4.png (5.98 KiB) 10187 mal betrachtet
-
- qt42.png (3.74 KiB) 10187 mal betrachtet
-
geisterfahrer
- Beiträge: 10
- Registriert: 11. August 2004 11:36
- Wohnort: Achim bei Bremen
na gut, dann muss man dann wohl per Hand machen.
In deinem Fall haben wir zwei Regionen im Fenster, einmal voll transparent und einmal irgendwie transparent. Als erstes beschreiben wir den transparenten Bereich:
unter Qt 3 hätte man damit ein voll transparentes Widget erzeugt.
ich denke aber, dass wenn du mit QT4 Painter halbtransparente Farben verwendest, könnte es klappen... Wenn nicht, dann kannste ein Pixmap mit deinen halbtransparenten Sachen erzeugen und dieses anschließend
mit dem Hauptpainter zeichnen...
In deinem Fall haben wir zwei Regionen im Fenster, einmal voll transparent und einmal irgendwie transparent. Als erstes beschreiben wir den transparenten Bereich:
Code: Alles auswählen
// Im Konstruktor:
setAutoMask(TRUE);
// in der updateMask()
QBitmap bm( size() );
bm.fill( color0 ); //transparent
QPainter paint;
paint.begin( &bm, this );
paint.setBrush( color1); // nicht transparent
paint.setPen( color1);
... zeichne, was du brauchst
paint.end();
setMask( bm );
} ich denke aber, dass wenn du mit QT4 Painter halbtransparente Farben verwendest, könnte es klappen... Wenn nicht, dann kannste ein Pixmap mit deinen halbtransparenten Sachen erzeugen und dieses anschließend
mit dem Hauptpainter zeichnen...
-
geisterfahrer
- Beiträge: 10
- Registriert: 11. August 2004 11:36
- Wohnort: Achim bei Bremen