Mam problem z klasami wyliczeń, QVariants i klasy QSettings. Istnieją wartości klasy enum, które chcę przechowywać w QVariant, który przechodzi do instancji QSettings. Tak, mój kod faktycznie wygląda mniej więcej tak:klasa enum w QVariant w 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));
W tym momencie w trakcie wykonywania kodu, twierdzenie skacze i narzeka:
ASSERT failure in QVariant::save: "Invalid type to save", file kernel\qvariant.cpp
Wyszukiwanie w internecie, dowiedziałem się, że klasa jest brakuje osprzętu < < i >> operator. Ale to nie jest opcja dla klas wyliczeniowych. Próbowałem nawet użyć
qRegisterMetaType<Foo>("Foo");
ale to nie pomogło. Może masz dla mnie inne sugestie/rozwiązania. Dzięki!
Masz rację, to problem z wyliczeniami w QVariants. Moja oryginalna implementacja polegała na zapisaniu rzeczywistych (niepodpisanych) wartości całkowitych w QVariant. Teraz próbowałem wyliczenia, ale wpadłem na ten problem z QVariants. Jednak wróciłem do pierwotnej implementacji z twoją sztuczką najniższych/najwyższych wartości w enumie. Dzięki. – CppChris