Seite 1 von 1

qvariant wert setzen von anderem qvariant - compile fehler

Verfasst: 18. Mai 2009 10:27
von dermoritz
folgendes Scenario: ich habe in einer Map<QString,Qvariant> Standardwerte für bestimmte Typen gespeichert z.b.: "int"->0,"bool"->false

in einer anderen Map<QString,QVariant> werden die Werte gespeichert. Um diese Map zurückzusetzen gehe ich sie durch suche nach dem korrekte type und setze auf den Standardwert:

Code: Alles auswählen

	foreach(QVariant value,map){
		if (allowedTypes.contains(value.typeName())){
			value.setValue(allowedTypes.value(value.typeName())); //zeile 86
		}

der compiler spuckt (für die Anweisung im if Block) nun folgenden (wie so oft) nichts sagenden Fehler aus:
c:/Programme/qt/commercial_MinGw_4_5_0/include/QtCore/../../src/corelib/kernel/qmetatype.h: In static member function `static int QMetaTypeId2<T>::qt_metatype_id() [with T = QVariant]':
c:/Programme/qt/commercial_MinGw_4_5_0/include/QtCore/../../src/corelib/kernel/qmetatype.h:199: instantiated from `int qMetaTypeId(T*) [with T = QVariant]'
c:/Programme/qt/commercial_MinGw_4_5_0/include/QtCore/../../src/corelib/kernel/qvariant.h:446: instantiated from `void qVariantSetValue(QVariant&, const T&) [with T = QVariant]'
c:/Programme/qt/commercial_MinGw_4_5_0/include/QtCore/../../src/corelib/kernel/qvariant.h:494: instantiated from `void QVariant::setValue(const T&) [with T = QVariant]'
source\meine.cpp:86: instantiated from here
c:/Programme/qt/commercial_MinGw_4_5_0/include/QtCore/../../src/corelib/kernel/qmetatype.h:189: error: `qt_metatype_id' is not a member of `QMetaTypeId<QVariant>'
mingw32-make[1]: *** [__tmp/__debug/meine.o] Error 1
mingw32-make[1]: Leaving directory `C:/projekte/3_038_FlexAlyzer/source/Applications/projekt'
mingw32-make: *** [debug] Error 2

Verfasst: 18. Mai 2009 11:05
von dermoritz
die scheiße hat mich stunden gekostet und is billig und trotzdem unschön:
in der Anleitung zu setValue steht:
If T is a type that QVariant doesn't support, QMetaType is used to store the value.A compile error will occur if QMetaType doesn't handle the type.
nun stellt sich heraus, dass QVariant 'QVariant' nicht bei setValue unterstützt aber als Konstrukteur. Konsequenterweise sollten alle Funktionen alle Typen unterstützen. Naja wie auch immer mit direkter Zuweisung gehts natürlich:

Code: Alles auswählen

value=allowedTypes.value(value.typeName());