QSettings中QVariant中的枚举类

Cpp*_*ris 5 qvariant qsettings c++11 enum-class qt5

我有枚举类,QVariants和QSettings类的问题.我想要存储在QVariant中的枚举类值,该QVariant进入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));
Run Code Online (Sandbox Code Playgroud)

此时执行代码时,断言跳进并抱怨:

ASSERT failure in QVariant::save: "Invalid type to save", file kernel\qvariant.cpp
Run Code Online (Sandbox Code Playgroud)

在互联网上搜索,我发现该类缺少一个合适的<<和>>运算符.但这不是枚举类的选项.我甚至试过用

qRegisterMetaType<Foo>("Foo");
Run Code Online (Sandbox Code Playgroud)

但它没有帮助.也许你有一些其他的建议/解决方案.谢谢!

小智 3

枚举是屏蔽的无符号整数,似乎是一个问题,请参阅

Qt4 QSettings保存枚举值(例如Qt::CheckState)

那里和这里可能的解决方案是将其转换为无符号。要检查返回枚举的 static_cast-result 是否有效,您可以将Foo_lowestFoo_highest值添加到枚举范围的开头和结尾。