我想在QSetting中保存QCheckBok的状态,我可以将它的值转换为int但是可能存在更简单和正确的方法吗?
这是我的代码:
QSetting setting;
Qt::CheckState checkState;
//...
checkState = (Qt::CheckState)setting.value("checkState", Qt::Unchecked).toUInt();
//...
setting.setValue("checkState", (uint)checkState);
setting.sync();
答案 0 :(得分:3)
首先,尽量避免使用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风格的演员表)很好。