Doppeltes connect() verhindern?

Alles rund um die Programmierung mit Qt
Antworten
CKassiopaia
Beiträge: 38
Registriert: 21. April 2009 16:42

Doppeltes connect() verhindern?

Beitrag 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!
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Wird überhaupt eine 2. Verbindung angelegt? Ansonsten kannst du ja zuvor ein disconnect ausführen.
CKassiopaia
Beiträge: 38
Registriert: 21. April 2009 16:42

Beitrag 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?
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Mach doch einfach nur einmal connect.
CKassiopaia
Beiträge: 38
Registriert: 21. April 2009 16:42

Beitrag 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 ... :-)
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Was soll am disconnect denn nicht sauber sein?
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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
CKassiopaia
Beiträge: 38
Registriert: 21. April 2009 16:42

Beitrag von CKassiopaia »

Besten Dank!
Klappt....so hab ich das auch gemacht!
Antworten