QVariant中的枚举类在QSettings中的应用

7
我有一个关于枚举类、QVariants和QSettings类的问题。我想要将枚举类的值存储在一个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));

在执行代码的这一点上,断言跳入并抱怨:
ASSERT failure in QVariant::save: "Invalid type to save", file kernel\qvariant.cpp

在搜索互联网时,我发现该类缺少适当的<<和>>运算符。但对于枚举类来说这不是一个选项。我甚至尝试使用

qRegisterMetaType<Foo>("Foo");

但这并没有帮助。也许你有其他的建议/解决方案,请告诉我。谢谢!
2个回答

3

你说得没错,这是与QVariants中枚举类型相关的问题。我的原始实现是将实际的(无符号)整数值保存在QVariant中。现在我尝试使用作用域枚举,但是我遇到了QVariants中的这个问题。然而,我通过在枚举中使用最小/最大值的方法,切换回了原始实现。谢谢。 - CppChris

0

自Qt 5.5以来,您可以使用Q_ENUM而不必担心调用qRegisterMetaType()

enum class Foo
{
    Bar1, Bar2
}
Q_ENUM(Foo)

...

Foo value = Foo::Bar2;
QSettings settings;
settings.setValue(QString("Foo"), QVariant::fromValue(value));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接