Seite 1 von 1

[Qt4.1] Hintergrundfarbe von QGroupBox

Verfasst: 19. August 2006 00:54
von heikob
Hallo,

ich versuche im Moment, die Hintergrundfarbe einer QGroupBox zu verändern. Dabei gehe ich folgendermaßen vor:

In einer Funktion ändere ich die Farbe von QPalette::Window auf die entsprechende Farbe.

Code: Alles auswählen

void siv::setWidgetBackgroundColor(QWidget * widget, const QColor & color)
{
	if (color.isValid())
	{
		QPalette palette( widget->palette() );
		palette.setColor( QPalette::Window, color );
		widget->setPalette( palette );
		widget->repaint();
	}
}
Diese Funktion rufe ich nach der Erstellung der Groupbox auf.

Code: Alles auswählen

controlGroupBox = new QGroupBox;
setWidgetBackgroundColor(controlGroupBox,QColor(255,0,0));
Eigentlich ist zu erwarten, dass die Groupbox anschließend rot ist, aber stattdessen bekomme ich das:
Bild
Oben geht die Groupbox noch weiter. Ich wollte es hier nicht übertreiben. :wink:

Wieso ist die Groupbox nicht komplett, bis auf die Widgets versteht sich, ausgefüllt? Was mache ich schon wieder falsch? Ich werde das Farbkonzeot von Qt4 wohl nie mehr verstehen. Es wäre schön, wenn mir mal wieder jemand auf die Sprünge helfen würde. Vielen Dank

heikob

Verfasst: 19. August 2006 02:40
von FlorianBecker
Ab 4.1 muss ein weitere Paramter auf true gestellt werden und zwar setAutoFillBackground

Die Funktion, die du da hast, ist hier aus dem Forum und ist noch von der Qt Version 4.0.x.

Verfasst: 19. August 2006 08:59
von heikob
Da hast du Recht. Die Funktion habe ich wirklich vor ca. einem Jahr hier aus dem Forum gefischt und finde sie äußerst praktisch. Ich nutze ihn zum Beispiel um ButtonText einzufärben. Klappt prima.

Aber zurück zum Problem. Da ich ja, bevor ich Frage, schon mal im Forum schaue, ob mein oder ein verwandtes Problem bereits diskutiert wurde, bin ich auch über setAutoFillBackground gestolpert und ausprobiert. Ich hatte es nur vergessen zu erwähnen. Hier also die geänderte Fassung der FUnktion:

Code: Alles auswählen

void siv::setWidgetBackgroundColor(QWidget * widget, const QColor & color)
{
	if (color.isValid())
	{
		QPalette palette( widget->palette() );
		palette.setColor( QPalette::Window, color );
		widget->setAutoFillBackground(true);
		widget->setPalette( palette );
		widget->repaint();
	}
}
Und hier das Ergebnis:
Bild
Wie man sieht, wurde der Hintergrund der Groupbox lediglich heller. Also das alleine kann es nicht gewesen sein. Hast du vielleicht noch weitere Ideen?[/list]

Verfasst: 19. August 2006 15:59
von FlorianBecker
Die Palette muß natürlich Palette::Background sein.

Verfasst: 19. August 2006 17:11
von heikob
Daran liegt es definitiv nicht. Denn in der Doku unter QPalette steht:
QPalette::Background - This value is obsolete. Use Window instead.
Oder habe ich falsch verstanden? Aber ein Test brachte auch keine Veränderung. Ich kümmere mich im Moment erst einmal um wichtigere Teile des Programms. Wenn jemand noch etwas einfallen sollte, wäre ich dankbar.

heikob

Verfasst: 19. August 2006 17:36
von FlorianBecker
Also ich habe das ganze im Designer einmal mit Palette ändern gemacht. Und es geht. Es fehlt nix - geht.

Aber da du das mit Window ja wusstest, wieso wusstest du das mit setAutoFillBackground nicht? Guck in die Doku, oder frag Trolltech, oder poste mal deinen gesamten Code. Ich denke, du hast so was wie setBackgroundRole oder so was gesetzt.

Also poste mal bitte die gesamte Klasse.