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
viele Connect's im Source Code
Re: viele Connect's im Source Code
Vielleicht weil connect const char* erwartet und kein QString.andiK hat geschrieben:So geht's allerdings nicht, der Kompiler meckert