Ho un problema con le classi enum, QVariants e la classe QSettings. Ci sono valori di classe enum che voglio memorizzare in un QVariant che entra in un'istanza di QSettings. Quindi, il mio codice è in realtà qualcosa di simile:classe enum in QVariant in QSettings
enum class Foo
{
Bar1, Bar2
}
Q_ENUMS(Foo)
Q_DECLARE_METATYPE(Foo)
...
Foo value = Bar2;
QSettings settings;
settings.setValue(QString("Foo"), QVariant::fromValue(value));
A questo punto eseguire il codice, un'affermazione salta e si lamenta:
ASSERT failure in QVariant::save: "Invalid type to save", file kernel\qvariant.cpp
Cercando su internet, ho scoperto che la classe è manca un raccordo < e >> operatore. Ma questa non è un'opzione per le classi enum. Ho anche provato a usare
qRegisterMetaType<Foo>("Foo");
ma non ha aiutato. Forse hai altri suggerimenti/soluzioni per me. Grazie!
Hai ragione, questo è un problema con le enumerazioni in QVarianti. La mia implementazione originale stava salvando i valori interi (senza segno) effettivi in QVariant. Ora ho provato l'enfasi dell'ambito, ma mi sono imbattuto in questo problema con QVariants. Tuttavia, sono tornato all'implementazione originale con il trucco dei valori più bassi/più alti nell'enum. Grazie. – CppChris