7

我对枚举类、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));

在执行代码的这一点上,一个断言跳进来并抱怨:

ASSERT failure in QVariant::save: "Invalid type to save", file kernel\qvariant.cpp

在互联网上搜索,我发现该类缺少合适的 << 和 >> 运算符。但这不是枚举类的选择。我什至尝试使用

qRegisterMetaType<Foo>("Foo");

但它没有帮助。也许您对我有其他建议/解决方案。谢谢!

4

2 回答 2

3

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

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

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

于 2014-04-03T14:57:28.877 回答
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));
于 2018-10-19T22:15:15.013 回答