Archiv verlassen und diese Seite im Standarddesign anzeigen : Qt: QObject oder QWidget als parent
PeterTheMaster
08-11-2002, 20:47
hi, weiss jemand den tieferen sinn dessen, dass alle QWidget konstruktoren nur QWidgets anstatt QObjects als parent zulassen?
hat sich von QObject nach QWidget etwas am umgang mit den parents geaendert?
oder kann ich ruhig ein QObject an ein QWidget static gecastet als parent uebergeben?
anda_skoa
08-11-2002, 20:51
Ein QWidget ist natürlich schon ein QObject aber nicht umgekehrt.
Du kannst dir ja mal in der API doc anschaun, wo der Unterschied zwischen QObject und QWidget liegt.
Ca. 50 Methoden schätze ich :D
Der Cast geht also nicht!
Ciao,
_
PeterTheMaster
08-11-2002, 20:59
nur wuerd ich gern wissen warum. mir erscheint das willkuerlich. sowohl bei QObject als auch bei QWidget steht bei der beschreibung des konstruktors nur, dass man sich quasi beim parent fuers loeschen anmeldet. also kann man sich sowohl als QObject als auch als QWidget bei einem QObject zum loeschen anmelden, bei einem QWidget kann man das nur noch als QWidget. aber wenn sogar ein QObject ein QWidget loeschen kann, wobei also definitiv nicht welche von dessen zusaetzlichen funktionen benutzt werden, warum sollte dann ein QWidget kein QObject loeschen koennen?
anda_skoa
08-11-2002, 23:03
Nochmal zum mitschreiben :)
1) QWidget ist ein QObject.
D.h. ein QObject kann als Parent ein QWidget erhalten und wird dann auch von diesem gelöscht.
2) QWidget hat einen Haufen mehr Methoden und Eigenschaften als ein QObject.
Mal ganz abgesehen davon, dass dir das Teil beim cast um die Ohren fliegen wird, was glaubst was passiert, wenn das Widget bei seinem vermeintlichen Parentwidget die Methode rect() aufruft?
Zum Beispiel, wenn das QObeject ein QTimer ist.
Vielleicht hast du ein Verständinsproblem mit objektorientierer Programmierung.
Eine Klasse ist ein Datentyp.
Wenn du einen Parameter eines bestimmten Typs hast, kannst du nur diesen Typ übergeben.
Man nennt das Typsicherheit.
Die Funktion kann sich darauf verlassen, dass der Parameter wirklich von diesem Typ ist und folgedessen das Interface dieses Typs hat.
Du kannst gern mal versuchsweise einen int Pointer an eine Funktion übergeben, die einen double Pointer erwartet.
Ciao,
_
PeterTheMaster
08-11-2002, 23:25
hehe, hab falschrum gedacht. sorry fuer die belaestigung.
meine klasse ist jetzt kein QWidget mehr sondern ein QObject, damit hat sich das sowieso geklaert.
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.