Signal aus allen Instanzen einer Klasse senden

Alles rund um die Programmierung mit Qt
Antworten
Okeanos
Beiträge: 14
Registriert: 16. Juli 2009 20:19

Signal aus allen Instanzen einer Klasse senden

Beitrag 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?
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: Signal aus allen Instanzen einer Klasse senden

Beitrag 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..
Okeanos
Beiträge: 14
Registriert: 16. Juli 2009 20:19

Re: Signal aus allen Instanzen einer Klasse senden

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