Probleme mit type_cast bei QVariant::UserType

Alles rund um die Programmierung mit Qt
Antworten
otternase
Beiträge: 62
Registriert: 25. Januar 2008 12:20

Probleme mit type_cast bei QVariant::UserType

Beitrag von otternase »

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!!!!
Antworten