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

相关推荐
郑州光合科技余经理3 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
feifeigo1233 天前
matlab画图工具
开发语言·matlab
dustcell.3 天前
haproxy七层代理
java·开发语言·前端
norlan_jame3 天前
C-PHY与D-PHY差异
c语言·开发语言
多恩Stone3 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
QQ4022054963 天前
Python+django+vue3预制菜半成品配菜平台
开发语言·python·django
遥遥江上月3 天前
Node.js + Stagehand + Python 部署
开发语言·python·node.js
m0_531237173 天前
C语言-数组练习进阶
c语言·开发语言·算法
Railshiqian3 天前
给android源码下的模拟器添加两个后排屏的修改
android·开发语言·javascript
雪人不是菜鸡3 天前
简单工厂模式
开发语言·算法·c#