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)的主要内容,如果未能解决你的问题,请参考以下文章
Qt - 将 QString 路径保存到注册表中的 QSettings
Qt4:QAbstractTableModel 拖放 w/o MIME
在 Qt 中,如何使用 QSettings 来创建/修改/删除 Windows 注册表项/值?