作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 QSetting 中保存 QCheckBok 的状态,我可以将它的值转换为 int 但也许存在更简单和适当的方法来做到这一点?
这是我的代码:
QSetting setting;
Qt::CheckState checkState;
//...
checkState = (Qt::CheckState)setting.value("checkState", Qt::Unchecked).toUInt();
//...
setting.setValue("checkState", (uint)checkState);
setting.sync();
最佳答案
首先,尽量避免 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 来设置和检索值。通常可以使用 Q_DECLARE_METATYPE 宏扩展 QVariant 以支持其他类型。这是文档:
http://doc.trolltech.com/4.6/qmetatype.html#Q_DECLARE_METATYPE
但是,这种机制似乎无法与枚举一起正常工作(当您调用 QVariant 上的 value()
成员函数时)。所以你现在拥有的(减去 C 风格的转换)很好。
关于Qt4 QSettings 保存枚举值(例如Qt::CheckState),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2102971/
我是一名优秀的程序员,十分优秀!