Seite 1 von 1

Signal aus allen Instanzen einer Klasse senden

Verfasst: 10. August 2011 10:09
von Okeanos
Ich habe eine Klasse, in der ich eine statische Variable als Speicher nutze. Verschiedene Klassen und Widgets erzeugen instanzen dieser Klasse und können die statische Variable verändern. Wird die statische Variable nun verändert, sollen alle Klassen, die eine Instanz der Speicherklasse erzeugt haben, den nun veränderten Wert anzeigen bzw. damit rechnen.

Wenn ich aber nun ein Signal aus der Speicherklasse aussende, wird dieses Signal nur von der Klasse empfangen, welche die änderung vorgenommen hat. Alle anderen Klassen empfangen das Signal natürlich nicht. Gibt es einen Weg, auch alle anderen Klassen über die Veränderung des Wertes zu informieren?

Re: Signal aus allen Instanzen einer Klasse senden

Verfasst: 10. August 2011 10:24
von solarix
Wenn sich deine Klasse ausschliesslich um diese Statische Variabel dreht, würde ich gleich von Anfang an eine Singleton-Klasse nehmen, anstelle normaler Klasseninstanzen. Dann hast du das Problem nicht mehr.

Falls diese Klasse jedoch auch noch andere, nicht-statische Members hat und du daher unbedingt mehrere Instanzen erzeugen musst, würde ich anstelle der Statischen Variabel eine Singleton-Klasse einsetzen und allenfalls mit der Signal-Weiterleitung arbeiten:

Code: Alles auswählen

Klasse::Klasse(...
{
   connect(Singleton::instance(), SIGNAL(changed()), this, SIGNAL(changed()));
}

void Klasse::inc()
{
  Singleton::instanc()->inc(); // jetzt wird Singleton::changed gefeuert und via Klasse::changed an alle anderen verteilt.
}
hth..

Re: Signal aus allen Instanzen einer Klasse senden

Verfasst: 10. August 2011 11:25
von Okeanos
Vielen Dank für diesen Tipp. Ich habe den Rat mit der Singleton-Klasse beherzigt und es funktioniert nun exakt wie gewünscht.