Seite 1 von 1

Slot mit Parameter?

Verfasst: 2. November 2011 12:50
von leseratte_68
Ich habe folgendes Problem:

Für eine Liste von Buttons soll ein slot definiert werden, der aufgerufen wird, wenn einer dieser Buttons angeklickt wurde.
Diese Buttons sind von QPushButton abgeleitet

Code: Alles auswählen

class ColorButton : public QPushButton
{
       Q_OBJECT

       ...
Die Verknüpfung von Signals und Slot geschieht in einer Schleife

Code: Alles auswählen

void IDlgBase::ConnectSignals()
{
	std::map<ColorButton*, structAttrTriple<AttributeRgb> >::const_iterator	citColorButton;

	// set the colors to the original attributes
	for (citColorButton=m_mapColorButton.begin(); citColorButton!=m_mapColorButton.end(); citColorButton++)
		connect(citColorButton->first, SIGNAL(clicked(bool)), this, SLOT(onValueChanged()));
} // IDlgBase::ConnectSignals
Der Code funktionert problemlos, der Slot wird jedesmal aufgerufen, wenn einer der Buttons gedrückt wird.

Das Problem ist, das ich nun im Slot wissen muß, WELCHER Button das Ereignis aufgerufen hat. Gibt es eine Möglichkeit einen entsprechenden Parameter an den Slot mitzugeben, oder eine ander Möglichkiet?

Danke und Gruß
Andreas

Re: Slot mit Parameter?

Verfasst: 2. November 2011 12:53
von solarix
- die saubere Variante: "QSignalMapper"
- der "dirty-Hack": "sender()" im Slot.

hth..

Re: Slot mit Parameter?

Verfasst: 2. November 2011 13:37
von leseratte_68
Warum ist

Code: Alles auswählen

sender()
ein Dirty-Hack? Ist doch immerhin in der Dokumentation beschrieben!

...und danke für den Hinweis :D

Re: Slot mit Parameter?

Verfasst: 2. November 2011 17:31
von solarix
leseratte_68 hat geschrieben:warum ist ...ein Dirty-Hack? Ist doch immerhin in der Dokumentation beschrieben!
Auch das steht in der Doku (siehe Abschnitt "Warning") :wink:

Re: Slot mit Parameter?

Verfasst: 3. November 2011 16:25
von ceumern
Noch besser als QSignalMapper:

QButtonGroup wurde genau dafür geschaffen:

http://doc.qt.nokia.com/latest/qbuttongroup.html