c++11 - QSettings 中 QVariant 中的枚举类

标签 c++11 qt5 qvariant qsettings enum-class

我对枚举类、QVariants 和 QSettings 类有问题。我想将枚举类值存储在进入 QSettings 实例的 QVariant 中。所以,我的代码实际上是这样的:

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

在互联网上搜索,我发现该类(class)缺少合适的 << and >> 运算符。但这不是枚举类的选项。我什至尝试使用
qRegisterMetaType<Foo>("Foo");

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

最佳答案

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

Qt4 QSettings save enumeration value (for example Qt::CheckState)

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

关于c++11 - QSettings 中 QVariant 中的枚举类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22840660/

相关文章:

c++ - 由于对模板化类型的通用(前向)引用而无法实例化函数模板

c++ - 使用可以在多个不同位置定义的函数之类的 C++ 类

c++ - Qt防止QDialog隐藏

c++ - QT 创建者和 Qt(只是它本身)的区别 - 启动 QT

qt - QVariant 内部如何工作?

c++ - std::shared_ptr 中的错误?

c++ - 前向声明 : incomplete type 'enums::Category' used in nested name specifier 有问题

android - 在 Android 安装上使用 Qt

c++ - QVariant 包装指针在 QML 中变为 null

serialization - 如何保存/序列化 QVariant 即 QVector<int>