Seite 1 von 1

unterschiedliche Signale -> gleicher Slot

Verfasst: 4. Oktober 2006 15:32
von archon
Hallo!

Mal eine ganz einfache Frage.

Hab 2 Signale

Code: Alles auswählen

connect( modeComboBox, SIGNAL( currentIndexChanged(const QString&) ),this, SLOT( viewUpdateToplevelSettings(const QString&) ) );
connect( pslCheckBox, SIGNAL( stateChanged ( int state )  ),this, SLOT( viewUpdateToplevelSettings(const QString&) ) );
will aber dieselbe Funktion aufrufen. Das wär ja absoluter Bullshit wenn ich die selbe Funktion zweimal mit unterschiedlichem Argumenten im Quellcode hab (über 1000 Zeilen Code pro Funktion)
Gibts dennoch einen Weg über zu viel Slot-Argumentation eine Lösung zu finden? Ich hab da mal irgendwann gelesen das dann die Slots zwar aufgerufen werden aber die Argumente weggelassen werden die zuviel sind, oder war das nur bei qt3 so? oder gibts noch einen anderen Weg?

Verfasst: 4. Oktober 2006 16:13
von macman
Unterschiedliche Signale benötigen unterschiedliche Slots, aber Du kannst ja kleine Slots nehmen, die dann wieder deine Riesenfunktion aufrufen. Wobei ich mir darüber mal Gedanken machen würde, ob man die Funktion nicht zerlegen kann. Ich fühl mich immer unwohl bei Funktionen mit mehr als 100 Zeilen Code :-)

Verfasst: 4. Oktober 2006 16:31
von archon
Hast schon recht mit kleinen Slots, finds aber trotzdem überflüssigen Code den man da schreibt aber bleibt mir wohl nix anderes übrig.

Gruss

Verfasst: 4. Oktober 2006 16:37
von caligano
und wenn du 2 Parameter bei der Funktion viewUpdateToplevelSettings übergibst ? int und QString?

Verfasst: 5. Oktober 2006 09:15
von Gagi
schreib dir nen neuen Slot der gleich heißt, aber int übergeben kriegt und ruf da drinn dann deine Funktion mit passenden String auf...

Verfasst: 5. Oktober 2006 13:05
von archon
caligano hat geschrieben:und wenn du 2 Parameter bei der Funktion viewUpdateToplevelSettings übergibst ? int und QString?
meinst du so?:

Code: Alles auswählen

connect( modeComboBox, SIGNAL( currentIndexChanged(const QString&) ),this, SLOT( viewUpdateToplevelSettings(const QString&, int state) ) ); 
connect( pslCheckBox, SIGNAL( stateChanged (  int state )  ),this, SLOT( viewUpdateToplevelSettings(const QString&, int state) ) ); 
Oberes dürfte funktionieren auch wenn er das 2. Argument ignoriert QString -> QString

Unteres funktioniert wohl nicht weil immer das erste Argument zählt QString -> int. Und einer Checkbox kann ich nicht beibringen das sie 2 signale sendet (ausser ich schreib die klasse um aber da will ich nix rühren)

Verfasst: 19. Oktober 2006 15:24
von Flachkoepper
Mahlzeit,

wenn du wirklich nur einen Slot haben willst, funktioniert folgendes:

Code: Alles auswählen

connect( modeComboBox, SIGNAL( currentIndexChanged(const QString&) ),this, SLOT( viewUpdateToplevelSettings() ) );
connect( pslCheckBox, SIGNAL( stateChanged (  int state )  ),this, SLOT( viewUpdateToplevelSettings() ) );
Wird zwar von vielen als unsauber angesehen, da die Argumente einfach stillschweigend weggelassen werden, aber es funktioniert. (s. Doku zu Signals und Slots)

Viele Grüße,
Flachkoepper.