【QT】枚举与字符串互相转换

2023-10-28

【QT】枚举与字符串互相转换

利用Qt元对象系统的特性实现对枚举类型与字符串的互相转换功能。

1 使用方法

  1. 项目文件添加QT += core;
  2. 创建类Car继承于QObject并使用Q_OBJECT宏;
  3. 类内添加枚举Color;
  4. 使用Q_ENUM宏将Color枚举注册到元对象系统中;
  5. 使用QMetaEnum::fromType获取枚举的QMetaEnum对象;
  6. 使用valueToKey或keyToValue进行转换操作。

2 枚举转字符串

  • 接口:
const char *QMetaEnum::valueToKey(int value) const
  • 输入: value为枚举值;
  • 输出: 枚举的字符串形式(没有找到枚举值返回空字符串)。

3 字符串转枚举

  • 接口:
int QMetaEnum::keyToValue(const char *key, bool *ok = nullptr) const
  • 输入: key为枚举字符串;
  • 输出: 返回值为枚举值,ok值为是否转换成功(需要做判断)。

4 注意事项

  • 暂不推荐在cpp文件内创建继承于QObject的类或使用Q_OBJEC宏。

5 示例

  • Car.h
#include <QObject>

class Car : public QObject
{
    Q_OBJECT
public:
    Car(QObject *parent = 0) {}
    ~Car() {}

    enum Color { RED, GREEN, BLUE };
    Q_ENUM(Color)
};
  • main.cpp部分代码
QMetaEnum metaColor = QMetaEnum::fromType<Car::Color>();

bool isOk = false;
qDebug()<<metaColor.valueToKey(Car::BLUE);
qDebug()<<metaColor.keyToValue("BLUE", &isOk)<<isOk; // OR
qDebug()<<metaColor.keyToValue("Car::BLUE", &isOk)<<isOk; 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【QT】枚举与字符串互相转换 的相关文章

随机推荐

  • 51单片机——独立按键

    如图是独立按键的原理图 通电后io口都是高电平 当按下K1 k4后 io口接地 变为低电平 说明当P30 P33为0时 代表我们按下了独立按键 例程1 独立按键控制LED亮灭 include
  • Matlab根据flac、pfc或其他软件导出的坐标及应力、位移数据再现云图

    Matlab根据flac pfc或其他软件导出的坐标及应力 位移数据再现云图 案例包括导出在flac6 0中导出位移的fish代码 也可以自己先准备软件导出的坐标数据及对应点的位移或应力数据 可根据需要自行修改为自己需要的云图数据 matl
  • 常用SQL语句

    一 基础1 说明 创建数据库CREATE DATABASE database name 2 说明 删除数据库drop database dbname3 说明 备份sql server 创建备份数据的 deviceUSE masterEXEC
  • 手机摄影_人像模式(双摄虚化Bokeh)

    很多人咨询我 手机上到底有哪些计算摄影的应用和技术 那么接下来就准备抽空写一系列文章做一下介绍 今天这一篇先从 人像模式 讲起 因为不管你现在是用iphone 还是小米 华为 OPPO VIVO 以及其他几乎所有品牌的手机 都已经能用这个功
  • 高仿“饿了么”Vue项目(一)

    高仿 饿了么 Vue项目 一 当我们把Vue框架的概念过了一遍之后 要进一步提升 就要看看别人是怎么使用Vue框架来做项目了 在github上有不少好的Vue项目 我找到了其中的一个 并把它作为下一步学习的目标 链接地址 https git
  • 使用docker/k8s部署vue项目

    使用docker k8s部署vue项目 1 编译前端项目 2 将前端文件打包 注意不要将dist目录打进去 自打dist里的文件 3 Dockerfile 本次打包将前端项目打入nginx镜像的html即可 FROM nginx MAINT
  • 最快捷方便的python安装库方法(适用于初学者)

    TOdfsa录标题 最快捷方便的python安装库方法 初学者 首先 当然我们首先已经安装好python以及其相关的环境配置 若是没有 当然也没有问题 我们可以从最初开始 详情请参考https www cnblogs com Coil177
  • 免费代理网址

    http www 66ip cn 66免费代理网 http www proxy360 cn Region China proxy360代理网 http www goubanjia com free gngn index shtml 转载于
  • MySQL-窗口函数&聚合函数

    从salaries表中查询emp no salary 并根据emp no字段升序累加salary作为running total字段 最后的结果如下图所示 MySQL语句如下 SELECT emp no salary SUM salary O
  • iOS 扩大UIView的点击范围原理

    扩大view点击范围的原理就是iOS的事件传递原理 事件从Window 上开始传递流程 首先执行window的hottest with event 方法 然后在该方法中会调用point inside 方法 判断点击点是否在 window中
  • 第五讲:常见的BeanPostProcessor

    常见的BeanPostProcessor 一 入门Demo 二 添加BeanPostProcessor 1 AutowiredAnnotationBeanPostProcessor 2 CommonAnnotationBeanPostPro
  • 关于SecureCRT输入无显示的问题解决办法

    在使用SecureCRT进行与ARM开发板TQ210做串口通信测试时 发现从开发板发数据能够在窗口中显示 而通过键盘输入时 SecureCRT不显示输入的内容 但敲Enter后 开发板也能接收到 这需要设置SecureCRT进行本地回显 L
  • 【牛客网SQL“必知必会”】刷题记录:一些容易遗忘的知识点

    目录 导读 SQL13 知识点 字符串 IN 范围选择 SQL14 知识点 BETWEEN 数值范围选择 SQL16 知识点 LIKE SQL22 知识点 字符串拼接 SQL23 知识点 时间函数格式化 SQL25 知识点 WHERE GR
  • 全排列算法(java实现)

    100题目之53题目和70题目 在做100题目的时候 全排列的算法困扰了很久 虽然网上了搜了一些资料 可是并没有搞懂 今天花了一个下午的时间 从新梳理了一遍 终于弄明白了 全排列的算法 递归分析网上都有 http www cnblogs c
  • Google Guava Cache--localcache本地缓存实例

    何为缓存 本地缓存类似于map 当给定一个key 首先查找缓存中是否已经有值了 如果有则直接返回数据 相反如果不存在这样的key 则将新的内容value值缓存起来 以便下一次来查询 可以快速返回 当然缓存不是说value值一直不变 会按照一
  • VMware虚拟机安装Windows Server 2012 R2

    想必同学们已经开学了 也都进入了军训阶段吧 而很多计算机网络专业的同学们要开始接触到Windows Server了 这也是计算机网络技术专业的专业基础课程 想当年我们实训课学习使用的好像是2008版的 也不晓得现在各个学校会用到哪个版本实操
  • STC单片机在线ISP IAP OTA

    作者 QQ群 852283276 微信 arm80x86 微信公众号 青儿创客基地 B站 主页 https space bilibili com 208826118 参考 STC15单片机功能和应用电路 STC8A单片机功能和应用电路 ST
  • 【漏洞发现-xss跨站脚本攻击】实体编码绕过

    一 漏洞描述 xss跨站脚本攻击是黑客通过 html注入 篡改了网页 插入了js恶意脚本 前端渲染时进行恶意代码执行 从而控制用户浏览的一种攻击 经常出现在需要用户输入的地方 一旦对输入不进行处理 就会发生网页被篡改 分为三类 反射型 经过
  • element中table表格多选项翻页或者切换不同数据后保存之前选择的数据并返显选中的状态

    问题需求 我们需要做一个选择表格中显示咨询意见的数据 但是因为点击不同的选项后会发送请求展示不同的数据 table表格普通的方法在选择新的数据后之前选择的数据就会消失 现在需要保存用户所选择的所有信息 解决方法 查找后发现Element中有
  • 【QT】枚举与字符串互相转换

    QT 枚举与字符串互相转换 利用Qt元对象系统的特性实现对枚举类型与字符串的互相转换功能 1 使用方法 项目文件添加QT core 创建类Car继承于QObject并使用Q OBJECT宏 类内添加枚举Color 使用Q ENUM宏将Col