Seite 1 von 1

QButton + Farbänderung

Verfasst: 30. April 2006 12:37
von dl4dz
Hallo Zusammen,

Ich habe in meiner Software einen PushButton. Wenn ich auf diesen klicke, soll sich die Hintergrundfarbe des Buttons ändern.

Hat jemand eine Idee, wie man sowas macht?

dl4dz

Verfasst: 30. April 2006 13:05
von neverlord
Es gibt die beiden Signale

Code: Alles auswählen

void QAbstractButton::pressed ()
This signal is emitted when the button is pressed down.
und

Code: Alles auswählen

void QAbstractButton::released ()
This signal is emitted when the button is released.
Musst also bei pressed die Farbe ändern und bei released die Farbe zurücksetzen.


MfG :)

Verfasst: 30. April 2006 17:32
von dl4dz
Hallo neverlord,

Danke für Deine Antwort. Ja, das mit den Signalen kenne ich. Ich nutze es auch um den Text des Buttons zu verändern.
Ich mache es mal etwas konkreter.
Mein Button ist ein einfacher "PushButton", der NICHT "toggelt".
Ich schreibe mal etwas Code....

void tuxtestWidget::PBsaveqrg_clicked()
{
QString pbsavebutton = PBsaveqrg->text();
if (pbsavebutton == "Sa&ve")
{
PBsaveqrg->setText("R.QRG");
}
if (pbsavebutton == "R.QRG")
{

PBsaveqrg->setText("Sa&ve");
}
}

Das funktioniert. Beim Programmstart zeigt mein PushButton den Text "Save". Nach dem Draufklicken "R.QRG"....beim nächsten Klick wieder "Save"...usw....
Jetzt möchte ich, dass beim Programmstart die Text-Hintergrund-Farbe für den Button GELB ist. Das funktioniert auch. Das habe ich über den QT-Designer eingestellt.
:arrow: Beim nächsten Klick soll die Text-Hintergrund-Farbe GRÜN sein. Bein nächsten Klick wieder GELB...usw...
Wie geht das????
setBackgroundColor geht leider nicht....

dl4dz

Verfasst: 1. Mai 2006 12:28
von neverlord
setBackgroundColor gibt es auch nicht, aber es gibt
void setBackgroundRole ( QPalette::ColorRole role )

Musst dir als Zwischenschritt wohl eine eigene Farbpalette definieren und die dann dem Button zuweisen.
Ich weiß jetzt aber nicht, ob es die Paletten auch schon unter Qt3 gab, ich habe hier nur die Qt4 Doku.


MfG

Verfasst: 2. Mai 2006 12:31
von Adi
Ich machs so:

Code: Alles auswählen

    QPalette palette = PBsaveqrg->palette();
    palette.setColor(QPalette::Button, QColor(0,255,0 )); // Für grün
    PBsaveqrg->setPalette(palette);
    PBsaveqrg->repaint();
P.S.: müsste das nicht on_PBsaveqrg_clicked() heissen?

Verfasst: 2. Mai 2006 19:46
von dl4dz
Hallo Zusammen,

Vielen Dank für Eure Hilfe. Es ist bei mir nicht ganz genau so, wie Ihr es beschrieben habt, aber fast. Das war sehr hilfreich für mich.

Bei mir muss ich schreiben....

Code: Alles auswählen

 QPalette palette = PBsaveqrg->palette(); 
    palette.setColor(QColorGroup::Button, green); // Für grün 
    PBsaveqrg->setPalette(palette); 
    PBsaveqrg->repaint(); 
Diese Zeile ist anders...
:arrow: palette.setColor(QColorGroup::Button, green);

Nun funzt es!!!
Vermutlich müsste es
"on_PBsaveqrg_clicked()" heissen...

Als "blutiger Anfänger" in C++ und QT hab' ichs noch nicht so mit den Konventionen.

:wink:

Danke nochmal !!!

DL4DZ

es geht noch einfacher!

Verfasst: 31. Mai 2006 12:47
von Step
hallo zusammen,

ich habe eine noch einfachere lösung, um die farbe in einem button zu ändern:

Code: Alles auswählen

	
QColor color(QColor(0, 255, 0, 180));

        okButton = new QPushButton("&OK");
	okButton->setPalette(QPalette(color));
:idea: