Seite 1 von 1
Doppeltes connect() verhindern?
Verfasst: 6. Mai 2009 12:23
von CKassiopaia
Hallo!
Kurze Frage: Kann ich vor einem connect() überprüfen, ob die Signal-Slot-Verbindung bereits besteht, dami ich doppelte Aktionen vermeide?
Als Alternative würde ich nach dem connect einfach überprüfen, ob der connect erfolgreich war und dies in einer Variable zwischenspeichern...
Danke!
Verfasst: 6. Mai 2009 12:27
von upsala
Wird überhaupt eine 2. Verbindung angelegt? Ansonsten kannst du ja zuvor ein disconnect ausführen.
Verfasst: 6. Mai 2009 12:40
von CKassiopaia
Ja, es wird eine zweite Verbingung angelegt... also das Dialogfeld, was bei dem SIGNAL kommt, wird zwei mal aufgerufen!
Ist denn ein vorheriges disconnect eine saubere Lösung?
Verfasst: 6. Mai 2009 12:55
von pfid
Mach doch einfach nur einmal connect.
Verfasst: 6. Mai 2009 12:58
von CKassiopaia
Hmmm....ich wollte von mehreren Stellen das Connect ausführen....von daher is das schwierig gewesen, da man nicht wusste, ob der "haken" bereits gesetzt wurde
Aber ich hab das jetzt auch nur "einmal" connected.
Aber meine Frage ist immer noch nicht beantwortet ...

Verfasst: 6. Mai 2009 13:18
von pfid
Was soll am disconnect denn nicht sauber sein?
Verfasst: 6. Mai 2009 13:24
von franzf
2 Möglichkeiten, die mir gerade einfallen:
1) eigene Methode für connect:
Code: Alles auswählen
bool uniqueConnect( <argumente wie connect>) {
disconnect( ... );
connect( ... );
}
Und konsequent in deinem Projekt diese Methode verwenden.
2) In deiner Klasse einfach eine Methode setzen, die bei Klick auf die Checkbox ausgeführt wird:
Code: Alles auswählen
bool Dlg::enableFeature( bool on ) {
if( on && !m_featureEnabled ) {
m_featureEnabled = true;
connect( ... );
return true;
}
if( !on && m_featureEnabled ) {
m_featureEnabled = false;
disconnect( ... );
return true;
}
return false;
}
Das sollte das sicherste sein. Und ganz sicher bist du, wenn der Slot, der bei einem enableFeature( true ) connected wird, noch private ist. So kann man nur über diese definierte Schnittstelle connecten, das Prüfen auf m_featureEnabled verhindert mehrfaches connecten.
Grüße
Franz
Verfasst: 6. Mai 2009 13:57
von CKassiopaia
Besten Dank!
Klappt....so hab ich das auch gemacht!