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_lowest和Foo_highest值添加到枚举范围的开头和结尾。
| 归档时间: |
|
| 查看次数: |
2737 次 |
| 最近记录: |