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

Part1: Summary

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

Q_ENUM宏将枚举注册到元对象系统中;

QMetaEnum::fromType获取枚举的 QMetaEnum对象;

valueToKey或 keyToValue进行转换操作

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

cpp 复制代码
public:
    enum DisplayPart
    {
        Head= 100,
        Hand,
        Neck,
        Leg
    };
    Q_ENUM(DisplayPart);

Part2: enum to string

cpp 复制代码
    QMetaEnum metaPart = QMetaEnum::fromType<DisplayPart>();
     qDebug()<<"show :"<<metaPart.valueToKey(Head);

输出:show : Head

Part3: string to enum

cpp 复制代码
   QMetaEnum metaPart = QMetaEnum::fromType<DisplayPart>();
     qDebug()<<"show :"<<metaPart.keyToValue("Head");

输出:show : 100

Part3: 使用模板

cpp 复制代码
    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

cpp 复制代码
 enum to string
qDebug()<<"show :"<<enmToStr<DisplayPart>(Head);

输出:show : Head

cpp 复制代码
 DisplayPart part = strToEnm<DisplayPart>("Head");
     qDebug()<<"show :"<<(int)part;

输出:show : 100

相关推荐
野蛮的大西瓜14 分钟前
Java+FreeSWITCH 开源呼叫系统详解
java·开发语言·语言模型·自然语言处理·机器人·开源·信息与通信
夜半被帅醒19 分钟前
C# 开发探索与实践 第一个C#程序
开发语言·c#
湫ccc25 分钟前
Python连接MySQL数据库教程
开发语言·python·mysql
精神病不行计算机不上班26 分钟前
[C++]多态
开发语言·c++
liuweni1 小时前
Next.js流量教程:如何在 Next.js 中使用 React Helmet 管理 SEO Meta 标签
开发语言·javascript·经验分享·前端框架·创业创新·媒体·程序员创富
Evand J1 小时前
平方根无迹卡尔曼滤波(SR-UKF)的MATLAB例程,使用三维非线性的系统
开发语言·matlab
好奇的菜鸟1 小时前
如何为IntelliJ IDEA配置JVM参数
开发语言·后端
陌上花开࿈2 小时前
用户登录认证
java·开发语言·前端
揽月随风醉2 小时前
golang 判断一个点是否在一个多边形内
开发语言·后端·golang
小陈phd2 小时前
QT从入门到精通(一)——Qlabel介绍与使用
开发语言·qt