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

相关推荐
愚润求学21 分钟前
【Linux】进程间通信(一):认识管道
linux·运维·服务器·开发语言·c++·笔记
珊瑚里的鱼36 分钟前
【滑动窗口】LeetCode 1658题解 | 将 x 减到 0 的最小操作数
开发语言·c++·笔记·算法·leetcode·stl
晚秋大魔王1 小时前
OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——wget
java·linux·运维·开发语言·华为·harmonyos
heath ceTide1 小时前
轻量、优雅、高扩展的事件驱动框架——Hibiscus-Signal
java·开发语言
_extraordinary_1 小时前
Java 常用的Arrays函数
java·开发语言
_extraordinary_1 小时前
Java 类和对象
java·开发语言
Aliano2171 小时前
TestNGException ClassCastException SAXParserFactoryImpl是Java自带的Xerces解析器——解决办法
java·开发语言·python
漫谈网络1 小时前
回调函数应用示例
开发语言·python·回调函数
亚林瓜子1 小时前
pyenv简单的Python版本管理器(macOS版)
开发语言·python·macos·pyenv
夜松云1 小时前
Qt信号槽机制与UI设计完全指南:从基础原理到实战应用
开发语言·qt·ui·qt designer·布局管理·参数传递·qt信号槽