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

Posted

技术标签:

【中文标题】Qt4 QSettings保存枚举值(例如Qt::CheckState)【英文标题】:Qt4 QSettings save enumeration value (for example Qt::CheckState) 【发布时间】:2010-01-20 16:26:09 【问题描述】:

我想在 QSetting 中保存 QCheckBok 的状态,我可以将其值转换为 int 但也许存在更简单和正确的方法来做到这一点?

这是我的代码:

QSetting setting;
Qt::CheckState checkState;
//...
checkState = (Qt::CheckState)setting.value("checkState", Qt::Unchecked).toUInt();
//...
setting.setValue("checkState", (uint)checkState);
setting.sync();

【问题讨论】:

【参考方案1】:

首先,尽量避免 C 风格的强制转换。例如,替换以下行:

checkState = (Qt::CheckState)setting.value("checkState", Qt::Unchecked).toUInt();

用这个:

checkState = static_cast<Qt::CheckState>(setting.value("checkState", Qt::Unchecked).toUint());

您将checkState 转换为uint 的行也应该更改。

其次,QSettings 依赖于 QVariant 来设置和检索值。 QVariant 通常可以使用 Q_DECLARE_METATYPE 宏扩展以支持其他类型。这是文档:

http://doc.trolltech.com/4.6/qmetatype.html#Q_DECLARE_METATYPE

但是,这种机制似乎不适用于枚举(当您在 QVariant 上调用 value() 成员函数时)。所以你现在拥有的(减去 C 风格的转换)很好。

【讨论】:

以上是关于Qt4 QSettings保存枚举值(例如Qt::CheckState)的主要内容,如果未能解决你的问题,请参考以下文章

Qt4.4如何获取用户设置路径

Qt - 将 QString 路径保存到注册表中的 QSettings

Qt4:QAbstractTableModel 拖放 w/o MIME

在 Qt 中,如何使用 QSettings 来创建/修改/删除 Windows 注册表项/值?

Qt QSettings 是不是会在加载后将键/值保留在内存中?

Qt/C++ 将通用对象序列化为 QSettings