Hallo
folgendes Problem:
1)
ich habe für QVariant mehrere userTypes definiert, jeweils als Zeiger auf verschiedene Objekttypen, die alle von einem Basetyp abgeleitet sind.
es gibt also
class base_type
class deriv_type_A : public base_type
class deriv_type_B : public base_type
...
Q_DECLARE_METATYPE(base_type*)
Q_DECLARE_METATYPE(deriv_type_A*)
Q_DECLARE_METATYPE(deriv_type_B*)
...
qRegisterMetaType<base_type*>();
qRegisterMetaType<deriv_type_A*>();
qRegisterMetaType<deriv_type_B*>();
...
2)
in verschiedenen Objektklassen gibt es als Properties eben solche eines dieser Usertypen:
class object_heinz {
...
Q_PROPERTY(deriv_type_A* horst READ getHorst WRITE setHorst DESIGNABLE true USER true)
...
}
class object_fred {
...
Q_PROPERTY(deriv_type_B* felix READ getFelix WRITE setFelix DESIGNABLE true USER true)
...
}
3)
Ich möchte in einer Funktion auf verschiedene Objekte des Typs objekt_heinz oder objekt_fred oder andere zugreifen:
mit diesem Aufruf bekomme ich ja die Property:
obj->metaObject()->property(i).read(obj)
dann habe ich einen da einen QVariant::UserType
wenn ich nun aber einen Member aus dem base_type aufrufen will, dann würde ich mir sowas wünschen:
base_type* tempobj=obj->metaObject()->property(i).read(obj).value<base_type*>();
tempobj->irgendeinmember();
mit einem automatischen type_cast von dem in der Property steckenden Zeiger (mal vom Typ deriv_type_A*, mal vom Typ deriv_type_B*) auf die genannte superclass base_type*
Aber das klappt nicht...
Ebenfalls funktioniert nicht
base_type* tempobj=dynamic_cast<base_type*>(obj->metaObject()->property(i).read(obj));
was ich jedoch glaube zu verstehen, weil da ja ein QVariant auf einen Zeiger gecastet werden müsste, ich will aber den Wert des QVariant casten...
Wie löste man das?
Danke!!!!