QPalette, QRadioButton

Alles rund um die Programmierung mit Qt
Antworten
tamasi
Beiträge: 45
Registriert: 5. Juli 2007 15:49

QPalette, QRadioButton

Beitrag von tamasi »

Hi,

wie aus der Überschrift zu erwarten, möchte ich einen QRadioButton ein bissel umfärben, speziell wenn er aktiviert wird.

Eig hoffte ich dass ganze mit einer Palette zu lösen, aber egal ob ich autoFill, setBackground setForeground usw auf true, false setze,
meiner Palette aktive, inaktive Gruppen, jedwede mir bekannte Rollen verteile, es geht nicht.
ui.rb_A_0->setAutoFillBackground(true);
ui.rb_A_0->setBackgroundRole(QPalette::Background);
QPalette p= ui.rb_A_0->palette();
p.setColor(QPalette::Background,Qt::red);
ui.rb_A_0->setPalette(p);
Alles was geht, ich bekomme eine rote rechteckige Fläche um den Button. In den Button selbst kam ich zu keinem Zeitpunkt.

Geht das überhaupt damit, oder muss ich extra eine Style definieren und dann das Primitiv für RadioButton inkl. der Sub_Elemente überschreiben?

lg
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Man nehme den Designer und ändere dort die palette so lange, bis man das richtige gefunden hat, dank Vorschau geht das relativ zugügig...
tamasi
Beiträge: 45
Registriert: 5. Juli 2007 15:49

Beitrag von tamasi »

Es passiert genau das gleiche wie per Hand. Das einzigste was ich ändern kann, ist das Rechteck des Buttons inkl. Text.
An den Inhalt des Buttons komme ich nicht. Ich kann weder die Größe noch die Farbe des Buttons ändern, den gecheckten Punkt innerhalb umfärben, in seinem Radius umändern oder andersweitige Änderungen an dem Button vornehmen.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

tamasi hat geschrieben:Es passiert genau das gleiche wie per Hand. Das einzigste was ich ändern kann, ist das Rechteck des Buttons inkl. Text.
An den Inhalt des Buttons komme ich nicht. Ich kann weder die Größe noch die Farbe des Buttons ändern, den gecheckten Punkt innerhalb umfärben, in seinem Radius umändern oder andersweitige Änderungen an dem Button vornehmen.
Der gecheckte Punkt innerhalb hört auf den Namen "QPalette::WindowText" (zumindest bei meinem Style "Bespin"), der Hintergrund auf "QPalette::Window". Hab das grad nämlich selber gebraucht und hat gleich geklappt.
autoFillBackground musst du auf "true" setzen.

Grüße
Franz
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

in seinem Radius umändern
Mit QPalette? Wie kommst du denn auf die Idee? Dafür ist QStyle zuständig...
tamasi
Beiträge: 45
Registriert: 5. Juli 2007 15:49

Beitrag von tamasi »

Das mit der größe wäre erst einmal nicht so wichtig. Viel bedeutsamer ist die Umfärbung.

Keine Ahnung ob hier etwas schief läuft, aber beim Style "windowsxp" komme ich nicht an das Grün für den Punkt.
QPalette::WindowText ändert die Beschriftung vom Button, das wars.

Das Grün wird mir beim Start der Paletteneinstellung im Designer auch nirgends per default angeboten. Wenigstens eine der ganze möglichen Rollen müsste ja als Standard Grün sein.

Und ja, AutoFillBgr steht auf true.

Bin grad irgendwie ratlos.
Ich denke ich versuchs mal per QStyle. Den setze ich dann speziell für das Parentwidget. Hoffe es geht so.
tamasi
Beiträge: 45
Registriert: 5. Juli 2007 15:49

Beitrag von tamasi »

Mit einem eigenen myStyle geht es ohne Probleme.

Eine Frage hätte ich noch.

Binde ich mein myStyle per QApplication::setStyle (new myStyle()), im main.cpp ein, geht alles wunderbar.

Möchte ich dagegen das myStyle nur für das Widget mit den RadioButtons einbinden passiert nichts.

Die Hilfe erläutert leider nirgends ob es Unterschiede in der Initierung zwischen einem "globalen" Style per QApplication und einem Widget Style innerhalb eines schon vorhanden QApplication Styles gibt.

Ich arbeite unter Windows XP, d.h. Application nutzt auomatisch das QWindowsXPStyle.

Den scheine ich in meinem childwidget nicht übrschreiben zu können, obwohl :
childwidget->style();
childwidget->setStyle( new myStyle());
childwidget->style();

eine erfolgreiche Änderung des Stylepointers anzeigt.

Weiß da wer Rat?
Antworten