qvariant wert setzen von anderem qvariant - compile fehler

Alles rund um die Programmierung mit Qt
Antworten
dermoritz
Beiträge: 21
Registriert: 27. April 2009 09:37

qvariant wert setzen von anderem qvariant - compile fehler

Beitrag 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
dermoritz
Beiträge: 21
Registriert: 27. April 2009 09:37

Beitrag 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());
Antworten