Am Freitag, dem 19. April 2002 um 22:07:39, schrieb Konrad Rosenbaum:
Ich habe trotzdem noch ein Problem damit: der MOC von Qt sorgt dafuer, dass alle Signal-Slot-Verbindungen von top aufgeloest werden, wenn ich das mache:
delete top;
Ja klar, in meinem Beispiel würde so etwas schief gehen, aber auf der rechten Seite von
button.onClick =
kann alles stehen, auf das man in C++ ein () anwenden kann. D. h. auch ein Objekt, das korrekt aufräumt, wenn das eigentliche Objekt verschwindet. Natürlich ist meine Bibliothek auch noch nicht fertig.
Wie loest Du dieses Problem? Ich sehe nicht ganz, wie das funktionieren soll.
Hab im Moment kein Beispiel parat, mal sehen...
obj1.connect(button,SIGNAL(click()),SLOT(calcsomething())); obj2.connect(button,SIGNAL(click()),SLOT(showsomething()));
button.onClick = bind(ersteFunktion, bind(zweiteFunktion, _1));
beispielsweise oder auch beliebig kompliziertere Konstrukte
Typsicherheit halte ich bei Qt auch nicht gerade fuer ein Problem:
Ähem, ich kann problemlos einen slot(int a) mit einem signal(double b) verbinden und merke das nicht beim Übersetzen. Bei mir dagegen kann ich sogar so etwas machen:
object.onChange = bind(&Label::setText, &myLabel, bind<string, int>(lexical_cast, _1));
object.onChange() hat ein int-Argument und kann trotzdem den Text eines Labels ändern, obwohl diese Funktion einen std::string erwartet. Eingebaute Typkonvertierungen wie int->double bzw. solche mit existierenden Konstruktor/Konvertierer wie const char*->std::string gibt es bei mir natürlich "for free".
- muessen alle Objekte von QObject abgeleitet sein, damit die
Qt-Mechanismen funktionieren, ist diese Bedingung erfuellt funktioniert alles ohne Probleme. Ist sie nicht erfuellt beschwert sich der Compiler.
Genau damit ist keine saubere Trennung von Anwendungs- und GUI-Code möglich. Bei meinem Wrapper geht das selbstverständlich: reiner Anwendungcode braucht nicht den bollin.h-Header einzuziehen und natürlich wird auch kein moc benötigt.
Wer ein Programm nicht so weit testet, dass jede Code-Stelle mindestens einmal angefahren wurde, sollte sich ueberlegen warum er so viele Bug-Reports bekommt...
Damit findest du trotzdem nicht alle Fehler.
Torsten