Transparente Widget

Alles rund um die Programmierung mit Qt
Antworten
graythornWW
Beiträge: 38
Registriert: 20. Oktober 2008 09:48

Transparente Widget

Beitrag 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
chris_g
Beiträge: 15
Registriert: 19. November 2009 10:06

Beitrag 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
graythornWW
Beiträge: 38
Registriert: 20. Oktober 2008 09:48

Beitrag 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?
Dateianhänge
snapshot.jpg
snapshot.jpg (78.48 KiB) 3656 mal betrachtet
chris_g
Beiträge: 15
Registriert: 19. November 2009 10:06

Beitrag 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.
graythornWW
Beiträge: 38
Registriert: 20. Oktober 2008 09:48

setAttribute(Qt::WA_NoSystemBackground);

Beitrag 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.....
Antworten