Seite 1 von 1

Transparente Widget

Verfasst: 11. Januar 2010 11:15
von graythornWW
Hallo zusammen,

ich habe eine Application (von QMainWidget abgeleitet). Darauf befindet sich eine Eingabezeile, die soll jedoch transparent werden.

Der Befehl

Code: Alles auswählen

ui.m_pEditWidget->setWindowOpacity(0.5);

funktioniert jedoch nicht, das Control sieht genauso aus wie zuvor. Er scheint nur auf top level Windows zu arbeiten :?:

Gibt es eine Möglichkeit, Controls auf einem QMainWidget transparent zu gestalten :?: :?:

Danke und Gruß
Andreas

Verfasst: 11. Januar 2010 11:47
von chris_g
Hi.

Ich mache das so:

Im Konstruktor setzte ich eine der folgenden Eigenschaften für den WindowType.

Code: Alles auswählen

setWindowFlags(Qt::SplashScreen); // With this set, the Widget can have a parent AND setWindowOpacity works without a Window border.	

//setWindowFlags( Qt::ToolTip ); // FullscreenController from VLC sources does this. Same effect as Qt::SplashScreen

this->setWindowOpacity(0.5); 
Ich denke, das 'sollte' dann auch bei allen Widgets funktionieren, die hier platziert werden.

Grüße
Chris

Verfasst: 11. Januar 2010 12:33
von graythornWW
Zum Verständniss meines kleinen Problems füge ich mal einen Scrrenshot hinzu.
Die hellblauen Editzeilen und die hellgrünen Buttons sollen halbtransparent werden, d.h. in diesem Falle sollen die Biergläser durchscheinen. Ich habe es mit folgendem Code versucht, der jedoch nicht funktioniert.

Code: Alles auswählen

BOMChecker::BOMChecker(QWidget *parent) : QMainWindow(parent)
{
	ui.setupUi(this);

	ui.m_pEdtPathOld->setWindowOpacity(0.5);
                ...

	connect(ui.m_pBtnBrowseOld, SIGNAL(clicked(bool)), this, SLOT(OnBrowsePathOld(bool)));
                ...
} // BOMChecker::BOMChecker

chris_g schrieb:
Im Konstruktor setzte ich eine der folgenden Eigenschaften für den WindowType.

Code:

setWindowFlags(Qt::SplashScreen); // With this set, the Widget can have a parent AND setWindowOpacity works without a Window border.

//setWindowFlags( Qt::ToolTip ); // FullscreenController from VLC sources does this. Same effect as Qt::SplashScreen

this->setWindowOpacity(0.5);
Wenn ich das mache, also:

Code: Alles auswählen

BOMChecker::BOMChecker(QWidget *parent) : QMainWindow(parent)
{
	ui.setupUi(this);

	setWindowFlags(Qt::SplashScreen);

	ui.m_pEdtPathOld->setWindowOpacity(0.5);
                ...

	connect(ui.m_pBtnBrowseOld, SIGNAL(clicked(bool)), this, SLOT(OnBrowsePathOld(bool)));
                ...
} // BOMChecker::BOMChecker
erhalte ich als Resultat ein QMainWindow ohne Rahmen (eben ein Splash-Window), und die Controls sind immer noch nicht transparent

Was mache ich falsch?

Verfasst: 11. Januar 2010 12:54
von chris_g
Les dir mal das durch: http://doc.trolltech.com/qq/qq16-background.html

und schau am besten die Beispiele in den QT-sourcen an. Besonders die Analoguhr, da wird auch mit Transparenzen gearbeitet.

setAttribute(Qt::WA_NoSystemBackground);

Verfasst: 11. Januar 2010 14:47
von graythornWW
wie kann ich verhindern, das ein Child seinen Hintergrund zeichnet?

Code: Alles auswählen

pChild->setAttribute(Qt::WA_NoSystemBackground);
führt zu keinem Ergebnis. Der Hintergrund ist nach wie vor der gleiche wie ohne diesen Aufruf.

Schon mal Danke für eure Hilfe.....