Seite 1 von 1

viele Connect's im Source Code

Verfasst: 24. November 2005 07:29
von andiK
Hallo zusammen,

In meinem aktuellen Programm erzeuge ich zur Laufzeit verschiedene Objekte (deren Klassen von QWidget abgeleitet sind), die miteinander verbunden werden können, damit sie Daten untereinander austauschen können. Den Datenaustausch habe ich mit Signal-Slot Connections realisiert.

Nun habe ich allerdings eine größere Anzahl verschiedener Objektklassen implementiert, die jeweils mehrere verschiedene Signale emittieren können und auch mehrere Slots besitzen,an die ein Signal-Sender "angeschlossen" werden kann.

Welche Input- und Output Schnittstellen meine Objektklassen besitzten habe ich jeweils in einer QStringList festgehalten.

Ich habe mir dann einen Code-Generator geschrieben, der meine Objektklassen-Definitionen liest und für jede mögliche Kombination eines Output-Signals mit jedem Input-Signals des selben Types eine Codezeile generiert:

Beispiel:

if( signalString == "output(int)" && slotString == "input(int)" ) connect( object1, SIGNAL(output(int) ) , object2, SLOT( input(int) ) );

...


So habe ich nun in meinem Source Code hunderte von Zeile mit diesen connect / disconnect statements, der ständig weiter wächst, da
ständig weitere Objekt-Typen hinzukommen. Der Code wird langsam etwas unhandlich und die Kompilierzeit wächst auch an.



Jetzt die Frage:

Gibt es irgendwelche raffiniertere Alternativen zu dem o.g. Konzept?

Kann ich iz.B. irgendwie während der Laufzeit diese Verbindungen connecten und disconnecten, indem ich die Signal und Slot
Namen in Variablen angeben kann?

Schön wäre z.B. :

QString signalString = "output(int)";
QString slotString = "input(int)";

connect( object1, SIGNAL( signalString ), object2, SLOT( slotString ) );

So geht's allerdings nicht, der Kompiler meckert


Freue mich über jede Idee...

Viele Grüße,

andiK

Re: viele Connect's im Source Code

Verfasst: 24. November 2005 09:56
von macman
andiK hat geschrieben:So geht's allerdings nicht, der Kompiler meckert
Vielleicht weil connect const char* erwartet und kein QString.

Verfasst: 24. November 2005 19:11
von andiK
Hallo Macman,

nein, ich hab' schon alles mögliche probiert, immer ohne Erfolg. Das Problem ist, das der Ausdruck SIGNAL( ) ein Macro ist, das vor dem Kompilieren vom MOC bereits umgesetzt wird.

andiK