Was ist qobject_cast?
Könnte mir jemand erklären, in so einfachen Worten wie möglich (oder so einfach, wie man es gerne hätte), was qobject_cast
ist, was es tut und warum wir Sie brauchen würden, um die Besetzung ein Klasse-Typ zum anderen?
Wie bekomme ich typecasting im Sinne von Gießen ein int
als char
oder QString
vielleicht verwenden QMessageBox
, aber warum werfen Sie in die verschiedenen Klassen?
InformationsquelleAutor Michael Thomas | 2017-05-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bevor Sie anfangen zu lernen, was
qobject_cast
ist, würden Sie brauchen, zu wissen, was C++'sdynamic_cast
ist. Dynamic cast ist alles über Polymorphismus.C++'s dynamic cast verwendet RTTI (Run Time Type Information) zum umwandeln eines Objekts. Aber
qobject_cast
dies ohne RTTI.Was ist dynamic cast?
Zum Beispiel nehmen wir an, wir haben ein Auto factory-Funktion. Wie diese:
Beachten Sie, dass
BmwCar
undAudiCar
Klassen ErbenCar
Klasse. Mit dieser Funktion können wir verschiedene Autos, die nur mit einer Funktion. Zum Beispiel:Ohne
dynamic_cast
Sie nicht in der Lage, um zu bestimmen, wenncar
ist einBmwCar
oder eineAudiCar
.Was ist der Unterschied zwischen
dynamic_cast
undqobject_cast
?qobject_cast
kann nur verwendet werden, mitQObject
abgeleiteten Klassen mitQ_OBJECT
makro.qobject_cast
nicht RTTI.InformationsquelleAutor Hi I'm Frogatto
qobject_cast
ist dasselbe wiedynamic_cast
, funktioniert aber nur für Kinder vonQObject
. Es erfordert nicht RTTI und es funktioniert viel schneller, da es nicht möglich ist, verwendenQObject
im Mehrfachvererbung.Zögern Sie nicht zu tun, selbst-Forschung und Lesen einige grundlegende Dinge über OOP und C++. Vor allem über Polymorphismus. Und nicht hestiate zu Lesen, Qt-Dokumentation, es enthält viele leicht verständliche Beispiele.
Einen ärgern, die Verwendung von
qobject_cast
ist immer ein Zeiger auf eine Klasse in einem slot:Gerade Hinzugefügt eine Probe. Wenn Sie nicht verstehen, wo um es zu verwenden, verwenden Sie es nicht. Es ist nicht weiteren verwenden alle Sachen von Qt 😉
TL;DR: Du wirst wissen, Wann Sie es brauchen. In vielen Fällen, richtig entkoppelt code werden nicht immer müssen es. Ich halte es für einen code smell und versuchen zu vermeiden, es zu benutzen, unentgeltlich. Sie hatte noch nicht eine Notwendigkeit, es ist in der Regel ein gutes Zeichen! Halten Sie es so.
InformationsquelleAutor Dmitry Sazonov