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

相关推荐
MemoriKu9 小时前
Flutter 相册 APP 视频模态稳定化实战:从视频抽帧、Embedding 元数据到 Android 真机启动修复
android·开发语言·前端·flutter·架构·音视频·embedding
SilentSamsara9 小时前
特征工程系统方法论:编码、分箱、交互特征与特征选择
开发语言·人工智能·python·机器学习·青少年编程·信息可视化·pandas
morning_judger9 小时前
Agent开发系列(十)-知识库建设(架构总览)
开发语言·人工智能
ch.ju9 小时前
Java程序设计(第3版)第四章——继承的特点
java·开发语言
geovindu9 小时前
python:Coroutines Pattern
开发语言·python·设计模式·协程模式
A.说学逗唱的Coke9 小时前
【运维专题】playbooks保姆级使用指南
运维·开发语言·python
牛油果子哥q9 小时前
【C++运算符重载】C++运算符重载终极精讲:单目/双目/关系/赋值运算符重载、成员与全局重载、重载禁区、底层原理与企业级工程规范
开发语言·c++
AI视觉网奇9 小时前
stl转glb glb缩放
开发语言·3d
日取其半万世不竭9 小时前
Rust《腐蚀》 服务器低成本怎么开?配置、端口和存档避坑
服务器·开发语言·rust
消失的旧时光-19439 小时前
Kotlin 协程设计思想(十):Kotlin 协程到底解决了什么问题?
开发语言·kotlin·生命周期·rxjava·协程·结构化并发