在代码编辑中,经常需要使用字符串表示状态,而状态变量确是枚举类型,所以一般需要做一个判断转换,正常方法:
if(枚举 == 枚举1)
return 字符串1
else if(枚举 == 枚举2)
return 字符串2
else if(枚举 == 枚举3)
return 字符串3
else if(枚举 == 枚举4)
return 字符串4
...
但是有时候需要依据字符串返回枚举类型呢?那怎么处理,还是使用if 语句?那就相对麻烦且不合适,容易出错、遗漏,而且代码改动较大。
下面提供一种枚举与字符串转换的方案。
重点内容:使用键值对绑定枚举与字符串!!!!!
比如这是我们的枚举:
enum KitUseStatus
{
eNull = 0, //初始化状态
eNormal, //正常状态
ePreTimeout, //即将过期
eTimeout, //过期
ePreInvalid, //即将失效
eInvalid //失效
};
那我们可以依据这个枚举创建一个常量Map(使用Hash也可以)键值对并初始化,代码如下:
const QMap<EKitUseState, QString> useStateMap = {
{
EKitUseState::eNull, "无法识别"},
{
EKitUseState::eNormal, "正常"},
{
EKitUseState::ePreTimeout, "即将过期"},
{
EKitUseState::eTimeout, "已过期"},
{
EKitUseState::ePreInvalid, "即将失效"},
{
EKitUseState::eInvalid, "已失效"}
};
因为使用const定义的变量需要初始化,且后面无法改变变量的值,所以称为常量。
然后就是对应的两个相互转换的函数:
//枚举类型转字符串
QString useStateToStr(int state)
{
return useStateMap[EKitUseState(state)];
}
//字符串转枚举
KitUseStatus strToUseState(QString str)
{
return useStateMap.key(str);
}
当我们获取到枚举状态的时候,只要调用useStateToStr
函数即可得到枚举对应的字符串,并显示。
相反,使用显示的字符串,调用strToUseState
函数可得到对应的枚举类型,然后保存到数据库或者配置文件都行。