Pimpl und Signale/Slots
Verfasst: 30. Januar 2010 03:09
Hallo zusammen,
ich habe kein direktes Problem, vielmehr eine Frage.
Nachdem ich die letzten Tage vergeblich die Qt-Dokumentation dazu befragt habe und gerade ausgiebig die Suchfunktion hier bemüht habe, traue ich mich doch mal, nachzufragen:
Ein normales, mit dem Qt-Creator erstelltes Fenster wird ja aufgespalten in den eigentlichen Code (fenstername.cpp/h) und den Gui-Kram (fenstername.ui bzw generiert ui_fenstername.h).
Dabei wird statt Vererbung schönerweise Pimpl eingesetzt (also die Ui-Klasse als Member des eigentlichen Fensters).
Das wirft natürlich das Problem auf, dass nun die Gui-Klasse nichts mehr über die Code-Klasse weiß (wenn ich die Klassen mal so nennen darf).
Das in den Codebeispielen in allen möglichen Tutorials und meist auch hier im Forum mit als drittem Parameter verwendete hat also Probleme, die Zielfunktion zu finden (das Einbinden der Codeklasse wäre extrem unschön, pimpl würde sein Ziel verfehlen und man hätte wohl zyklische Abhängigkeiten).
Nun scheint das Ganze aber auf magische Weise doch zu klappen, indem einfach Slots/Signale der Qt-Oberklasse (QDialog) genommen werden und in der Codeklasse Slots wie on_SendingObject_SendingObjectsSignal() implementiert werden.
Ich bin zwar begeistert, dass das so wunderschön funktioniert, aber konnte dazu bisher keine Dokumentation finden.
Hat jemand von euch vielleicht eine genauere Erklärung dafür?
Besten Dank im Voraus
ich habe kein direktes Problem, vielmehr eine Frage.
Nachdem ich die letzten Tage vergeblich die Qt-Dokumentation dazu befragt habe und gerade ausgiebig die Suchfunktion hier bemüht habe, traue ich mich doch mal, nachzufragen:
Ein normales, mit dem Qt-Creator erstelltes Fenster wird ja aufgespalten in den eigentlichen Code (fenstername.cpp/h) und den Gui-Kram (fenstername.ui bzw generiert ui_fenstername.h).
Dabei wird statt Vererbung schönerweise Pimpl eingesetzt (also die Ui-Klasse als Member des eigentlichen Fensters).
Das wirft natürlich das Problem auf, dass nun die Gui-Klasse nichts mehr über die Code-Klasse weiß (wenn ich die Klassen mal so nennen darf).
Das in den Codebeispielen in allen möglichen Tutorials und meist auch hier im Forum mit
Code: Alles auswählen
thisCode: Alles auswählen
connectNun scheint das Ganze aber auf magische Weise doch zu klappen, indem einfach Slots/Signale der Qt-Oberklasse (QDialog) genommen werden und in der Codeklasse Slots wie on_SendingObject_SendingObjectsSignal() implementiert werden.
Ich bin zwar begeistert, dass das so wunderschön funktioniert, aber konnte dazu bisher keine Dokumentation finden.
Hat jemand von euch vielleicht eine genauere Erklärung dafür?
Besten Dank im Voraus