Seite 1 von 1
Transparent Widget Background?
Verfasst: 27. Januar 2006 16:59
von Marco812
Hallo,
wenn man in dem Beispiel QRDIR\demos\gardients auf die Schaltfläche What’s This? drückt, wird ein Infotext angezeigt, welcher halbtransparent unterlegt ist. Der Code dafür befindet sich im QRDIR\demos\shared.
Da das Beispiel recht umfangreich ist, weis in nicht genau was ich alles für mein vorhaben benötige.
Das ganze soll in meinem Programm so aussehen, ich drücke auf eine Schaltfläche und dann wird über dieser ein Infotext und darunter ein Bild angezeigt, welches halbtransparent unterlegt ist, wie in dem Beispiel.
Kann mir jemand einen Tipp und etwas Hilfestellung geben?
Gruß
Marco812
P.S.
Ein kleines Codebeispiel wäre super!
Verfasst: 28. Januar 2006 13:07
von Nassian
Ein Codebeispiel hab jetzt zwar nicht, aber sollte nicht so schwer zum Programmieren sein.
Im Prinzip musst du nur die Klasse QWidget neu implementieren und die paint Methode überschreiben (da zeichnest du dann dieses Blatt mit dem Schatten nach). Und dann setzt du einfach die Transparenz von dem Widget auf den Wert den du möchtest. Der QtAssistant sollte alles dafür bereit halten.
Verfasst: 28. Januar 2006 18:03
von Marco812
Hallo,
danke für den Tipp. Das es so funktioniert habe ich mittlerweile aus dem Beispiel erkennen können, leider scheitert es noch ein bisschen bei der Ausführung, aber ich werde mal schauen wie weit ich komme. Wenn ich es gelöst habe oder eine konkrete frage dazu habe, melde ich mich noch mal.
Gruß
Marco812
Verfasst: 28. Januar 2006 21:05
von Marco812
---
Verfasst: 29. Januar 2006 17:02
von Marco812
Hallo,
kann mir evtl. jemand sagen, wie ich den Hintergrund von einem QWidget Transparent bekomme, dann wäre mein Problem auch gelöst!?
Gruß
Marco812
Verfasst: 30. Januar 2006 18:00
von Esleborn
wenn du voll transparent meinst:
hab ich hier mal beschrieben
Verfasst: 30. Januar 2006 19:31
von Marco812
Hallo,
ja ich meine voll transparent, aber bei mir funktioniert es leider nicht. Ich erhalte nur einen schwarzen Hintergrund. Ich habe einfach deinen Code in ein QWidget eingefügt und mit SetTransparency(this, TRUE); aufgerufen.
Hast du evtl. noch einen Tipp (QT 4.1)
Gruß
Marco812
Verfasst: 30. Januar 2006 20:15
von Esleborn
bentutz du Qt 4.*, das statisch kompliliert wurde unter Windows? Da scheint das nämlich irgendwie Probleme zu machen...
Was für ein Widget ist es?
Versuch mal folgendes, setzt nicht nur die Alphas von:
QPalette::Base und QPalette::Background, sondern auch von:
QPalette::Light, QPalette::Dark
und wenn es ein Button ist, setz auch noch die von:
QPalette::Shadow, QPalette::Midlight, QPalette::Mid und QPalette::Button
Hoffe das hilft weiter
Elgrimm Esleborn
PS: Wenn es ein Button ist, ist das Schwarz selbstverständlich, da das Parent bei einem Buttonchild auf das Selbstzeichnen verzichtet, was das "nicht zeichnen" der Stelle verursacht. Und das sieht halt schwarz aus... macht man es statt dessen durchsichtig, so zeichnet das Parent die Stelle und sie ist nicht schwarz.
Verfasst: 30. Januar 2006 21:24
von Marco812
Hallo,
es will nicht funktionieren, ich habe mal den Code angehängt. Benutze Visual Studio 2003, wo kann ich da dynamisch oder statisch einstellen?
Wäre für weitere Hilfe dankbar.
Gruß
Marco812
Verfasst: 30. Januar 2006 22:59
von Esleborn
tsja tut mir leid da kann ich nicht helfen...das liegt nämlich daran, dass es ein toplevel item ist...
da solltest du folgendes benutzen:
Code: Alles auswählen
void QWidget::setMask ( const QBitmap & bitmap )
void QWidget::setMask ( const QRegion & region )
Verfasst: 31. Januar 2006 09:16
von Marco812
Hallo,
es will mir nicht gelingen, ich habe auch schon die Beispiele durchgeschaut, aber nichts gefunden. Kennt jemand ein keines Beispiel doer würde mir eins schreiben?
Gruß
Marco812
Verfasst: 31. Januar 2006 21:28
von Marco812
Hallo,
das muss doch irgendwie gehen. Zum besseren Verständnis habe ich mal ein Bild angehängt.
Gruß
Marco812
Verfasst: 25. Februar 2006 00:03
von Esleborn
mmh ich teste mal
Code: Alles auswählen
QApplication::setStyle ( QStyleFactory::create ( "Windows" ) );
desweiteren solltest du QPalette::Button, QPalette::Window und QPalette::Base durchsichtig schalten...