当前位置: 首页 > article >正文

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

Part1: Summary

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

Q_ENUM宏将枚举注册到元对象系统中;
QMetaEnum::fromType获取枚举的 QMetaEnum对象;
valueToKey或 keyToValue进行转换操作

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

public:
    enum DisplayPart
    {
        Head= 100,
        Hand,
        Neck,
        Leg
    };
    Q_ENUM(DisplayPart);

Part2: enum to string 

    QMetaEnum metaPart = QMetaEnum::fromType<DisplayPart>();
     qDebug()<<"show :"<<metaPart.valueToKey(Head);

输出:show : Head

Part3: string to enum

   QMetaEnum metaPart = QMetaEnum::fromType<DisplayPart>();
     qDebug()<<"show :"<<metaPart.keyToValue("Head");

输出:show : 100

Part3: 使用模板

    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

 enum to string
qDebug()<<"show :"<<enmToStr<DisplayPart>(Head);

输出:show : Head

 DisplayPart part = strToEnm<DisplayPart>("Head");
     qDebug()<<"show :"<<(int)part;

输出:show : 100


http://www.kler.cn/a/441624.html

相关文章:

  • Rust关键字实例解析
  • 虚拟机安装+XS hell+Xfit(安装方法大致都相同,若不一样,可看其他的)
  • PVE——OpenWRT 硬盘 size单位的调整
  • 【计算机网络】期末考试预习复习|上
  • Java全体系精华(上):从基础到框架,构建坚实开发技能
  • MySQL(七)---C/C++连接MySQL
  • Roslyn 是什么?
  • 从 CephFS 到 JuiceFS:同程旅行亿级文件存储平台构建之路
  • STM32F407ZGT6-UCOSIII笔记6:UCOS-III软件定时器
  • py脚本部署到服务器定时启动
  • 大语言模型与水文水资源领域的深度融合:如何高效完成时间序列分析、空间数据处理、水文模型优化以及智能科学写作等
  • UNIAPP-微信小程序实现文本纠错功能
  • 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(19):密钥
  • 02. Docker:安装和操作
  • supervision - 好用的计算机视觉 AI 工具库
  • java后端环境配置
  • Linux栈帧
  • Ubuntu22.04搭建FTP服务器保姆级教程
  • SSM 电脑配件销售系统的高效设计与 JSP 实现技巧分享
  • sql server一些冷知识