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

相关推荐
编码浪子2 分钟前
趣味学RUST基础篇(构建一个命令行程序2重构)
开发语言·重构·rust
echoarts40 分钟前
MATLAB R2025a安装配置及使用教程(超详细保姆级教程)
开发语言·其他·matlab
阿方.9181 小时前
《数据结构全解析:栈(数组实现)》
java·开发语言·数据结构
Dovis(誓平步青云)1 小时前
《探索C++11:现代语法的内存管理优化“性能指针”(下篇)》
开发语言·jvm·c++
charlie1145141911 小时前
前端三件套简单学习:HTML篇1
开发语言·前端·学习·html
kebeiovo2 小时前
项目必备流程图,类图,E-R图实例速通
开发语言·r语言·流程图
软件开发-NETKF88882 小时前
JSP到Tomcat特详细教程
java·开发语言·tomcat·jsp·项目运行
ftswsfb2 小时前
现代C++:现代C++?
开发语言·c++
乌萨奇也要立志学C++2 小时前
【C++详解】C++ 智能指针:使用场景、实现原理与内存泄漏防治
开发语言·c++
minji...2 小时前
C++ 详细讲解vector类
开发语言·c++