欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > Qt Q_ENUM enum 转 QString 枚举字符串互转; C++模板应用

Qt Q_ENUM enum 转 QString 枚举字符串互转; C++模板应用

2024/12/21 23:51:12 来源:https://blog.csdn.net/q610098308/article/details/144537902  浏览:    关键词:Qt Q_ENUM enum 转 QString 枚举字符串互转; C++模板应用

Part1: Summary

项目中我们常用到命名,使用 enum 转成 string ,方便简洁;Qt给我们提供了一个很方便的功能 Q_ENUM,可以实现枚举字符串互转;

Q_ENUM宏将枚举注册到元对象系统中;
QMetaEnum::fromType获取枚举的 QMetaEnum对象;
valueToKey或 keyToValue进行转换操作

下面我们看一下具体应用;

public:enum DisplayPart{Head= 100,Hand,Neck,Leg};Q_ENUM(DisplayPart);

Part2: enum to string 

    QMetaEnum metaPart = QMetaEnum::fromType<DisplayPart>();qDebug()<<"show :"<<metaPart.valueToKey(Head);

输出:show : Head

Part3: string to enum

   QMetaEnum metaPart = QMetaEnum::fromType<DisplayPart>();qDebug()<<"show :"<<metaPart.keyToValue("Head");

输出:show : 100

Part3: 使用模板

    template <typename T>static T strToEnm(QString str){QMetaEnum metaEnm = QMetaEnum::fromType<T>();return (T)metaEnm.keyToValue(str.toStdString().data());}template <typename T>static QString enmToStr(T value){QMetaEnum metaEnm = QMetaEnum::fromType<T>();return metaEnm.valueToKey(value);}

Part4: Test

 enum to string
qDebug()<<"show :"<<enmToStr<DisplayPart>(Head);

输出:show : Head

 DisplayPart part = strToEnm<DisplayPart>("Head");qDebug()<<"show :"<<(int)part;

输出:show : 100

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com