Färben eines Pushbuttons

Alles rund um die Programmierung mit Qt
Antworten
mostrich
Beiträge: 5
Registriert: 10. November 2006 15:41
Wohnort: Mannheim

Färben eines Pushbuttons

Beitrag von mostrich »

Hallo,

momentan steh ich auf dem Schlauch.
Folgendes Problem:

Ich habe eine Buttongroup (exclusive) mit mehreren Pushbuttons (als ToggleButtons):

Code: Alles auswählen

buttonBox->setColumnLayout( 5, QWidget::Horizontal );
buttonBox->setAlignment( Qt::AlignLeft );
buttonBox->setExclusive(TRUE);
buttonBox->setBackgroundMode( Qt::PaletteButton );
c=0;
for (QStringList::Iterator it = butList.begin(); it != butList.end(); ++it )
{
  but = new QPushButton( *it, buttonBox );
  but->setToggleButton( TRUE ); 
  but->setHidden( FALSE );
  buttonBox->insert( but, c );
  c++;
}
connect( buttonBox, SIGNAL(pressed(int)), this, SLOT(buttonPressed(int)));
Wird ein Pushbutton gedrückt, wird das Signal clicked mit der Id des Buttons gesendet.
Das Signal wird in einem entsprechenden Slot empfangen. Dort
wiederrum wird eine Routine/Prozess gestartet und der Button soll gefärbt werden:

Code: Alles auswählen

void buttonPressed( int id )
{
   QButton *but;

   but = buttonBox->find(id);
   if ( but->text() == "Bla" )
   {
      if ( running( but->text() == 0 )
      {
          QPalette p = but->palette();
          p.setColor(QColorGroup::Button, color);
          but->setPalette(p);
          but->repaint(); 
      }
   }
}
Leider sieht man die Färbung nicht, weil der Button aktiviert ( isOn = TRUE ) ist.
Frage: Wie bekomme ich das hin, das der Button auch im aktiven Zustand bunt ist?

Ich benutze Qt 3.3.4 unter SuSE Linux 9.3.

Wolfgang
Flachkoepper
Beiträge: 149
Registriert: 11. Januar 2005 12:14
Wohnort: Hannover

Beitrag von Flachkoepper »

Am einfachsten würde es wahrscheinlich gehen, wenn du deinem Button ne komplett neue Palette, basierend auf der gewünschten Farbe, zuweist. Dies hat den Vorteil, dass, wenn z.B. die Hintergrundfarbe deines Buttons auf einmal schwarz ist, die Schriftfarbe automatisch hell dargestellt wird.

Code: Alles auswählen

QColor c(Qt::red);
button->setPalette( QPalette(c) ); 
Antworten