unterschiedliche Signale -> gleicher Slot

Verschiedenes zu Qt
Antworten
archon
Beiträge: 117
Registriert: 22. August 2006 12:01

unterschiedliche Signale -> gleicher Slot

Beitrag 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?
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag 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 :-)
archon
Beiträge: 117
Registriert: 22. August 2006 12:01

Beitrag 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
caligano
Beiträge: 126
Registriert: 19. August 2006 15:33

Beitrag von caligano »

und wenn du 2 Parameter bei der Funktion viewUpdateToplevelSettings übergibst ? int und QString?
Gagi
Beiträge: 6
Registriert: 4. Oktober 2006 17:36

Beitrag 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...
archon
Beiträge: 117
Registriert: 22. August 2006 12:01

Beitrag 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)
Flachkoepper
Beiträge: 149
Registriert: 11. Januar 2005 12:14
Wohnort: Hannover

Beitrag 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.
Antworten