Qt Q_ENUM使用 枚举字符串互转

2023-05-16

目录

        • 1.简述
        • 2.Q_ENUM用法
            • 2.1 声明使用
            • 2.2 测试例子
        • 3.用模板实现一个字符串枚举互转
            • 3.1代码
            • 3.2 用法示例

1.简述

数据库里用到了枚举的存储,比如一个设备有两个状态,保持数据库和代码的可读性,当然是用枚举了,那就需要把枚举转成字符串存储进去,读的时候再转回来。
在这里插入图片描述

Qt 中支持了枚举与字符串互转的用法,通过moc编译器实现,
所以使用的时候需要添加Q_OBJECT宏继承QObject
并且声明为public属性,以便外部使用。

2.Q_ENUM用法

2.1 声明使用
class Dialog : public QDialog
{
    Q_OBJECT
public:
    enum EnmState{
        ENM_STATE_A = 0,
        ENM_STATE_B = 2,
        ENM_STATE_C,
    };
    Q_ENUM(EnmState);
};
2.2 测试例子

尝试一下QMetaEnum提供的各种功能

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    resize(820,540);

    QMetaEnum enmState = QMetaEnum::fromType<Dialog::EnmState>();
    qDebug()<<enmState.name();//枚举的类型名称
    qDebug()<<enmState.keyCount();//键个数
    qDebug()<<enmState.isValid()<<enmState.scope();//是否有效 声明自哪个类
    qDebug()<<enmState.keyToValue("ENM_STATE_A"); //字符串转枚举
    qDebug()<<QString(enmState.valueToKey(ENM_STATE_A)); //枚举转字符串
    qDebug()<<QString(enmState.valueToKey(ENM_STATE_B));
    for(int i = 0;i < enmState.keyCount();i++){ //遍历枚举
        qDebug()<<QString(enmState.key(i))<<enmState.value(i);
    }
}
EnmState
3
true Dialog
0
"ENM_STATE_A"
"ENM_STATE_B"
"ENM_STATE_A" 0
"ENM_STATE_B" 2
"ENM_STATE_C" 3

3.用模板实现一个字符串枚举互转

3.1代码
class CEnmDef:public QObject{
    Q_OBJECT
public:
     enum EnmDevSwitch{
         ENM_SWITCH_ON = 0,
         ENM_SWITCH_OFF,
     };
    Q_ENUM(EnmDevSwitch)
    
    template <typename EnmType>
    static EnmType strToEnm(QString strText)
    {
          QMetaEnum metaEnm = QMetaEnum::fromType<EnmType>();
          return (EnmType)metaEnm.keyToValue(strText.toStdString().data());
    }
    template <typename EnmType>
    static QString enmToStr(EnmType enmVal)
    {
        QMetaEnum metaEnm = QMetaEnum::fromType<EnmType>();
        return metaEnm.valueToKey(enmVal);
    }
}
3.2 用法示例
	 //字符串转枚举
     CEnmDef::EnmDevSwitch enmVal = CEnmDef::strToEnm<CEnmDef::EnmDevSwitch>("ENM_SWITCH_ON");
     //枚举转字符串
     QString strSwitch = CEnmDef::enmToStr<CEnmDef::EnmDevSwitch>(CEnmDef::ENM_SWITCH_ON);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt Q_ENUM使用 枚举字符串互转 的相关文章

  • Enum枚举前后端传输展示方案

    1 定义枚举类型 public enum RolesTypeEnum implements Enumerator MANAGER 34 管理员 34 0 BUSINESS 34 招商员工 34 1 PROPERTY 34 物业员工 34 2
  • c++ enum class转int

    示例 enum class 定义 span class token keyword enum span span class token keyword class span span class token class name Colo
  • C++中的枚举(enum)

    C 43 43 中的枚举 enum 枚举类型 enumeration 是 C 43 43 中的一种派生数据类型 xff0c 它是由用户定义的若干枚举常量的集合 枚举是一个数值集合 xff0c 是给一个值命名的一种方法 如果想要使用整数来表示
  • Qt Q_ENUM使用 枚举字符串互转

    目录 1 简述2 Q ENUM用法2 1 声明使用2 2 测试例子 3 用模板实现一个字符串枚举互转3 1代码3 2 用法示例 1 简述 数据库里用到了枚举的存储 xff0c 比如一个设备有两个状态 xff0c 保持数据库和代码的可读性 x
  • C#中的枚举 Enum和enum的区别

    枚举类型本质上是一个字典 xff0c 它将一组字符串映射到一组整数值 每个枚举常量都具有一个关联的整数值 xff0c 默认情况下 xff0c 第一个枚举常量的值为 0 xff0c 后续枚举常量的值会自动加 1 C 中有两种枚举类型 xff1
  • enum 与string的转换

    从enum转换为string可以用ToString 方法 xff0c 如果从string转化为enum xff1a var domInt 61 Convert ToString row 34 DomInt 34 FlightDomInt d
  • c语言enum枚举字符串,c语言enum使用_enum枚举变量

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 二 enum枚举 1 枚举的定义 枚举类型定义的一般形式为 xff1a enum 枚举名 枚举值表 在枚举值表中应罗列出所有可用值 这些值也称为枚举元素 例如 xff1a 该枚举名为weekda
  • C++枚举类型enum使用方法(附带可用代码+通俗易懂)

    1 说明 枚举用来表示某类事情的结果 xff1b 例1 xff1a 下棋比赛的三种结果 xff0c 赢 xff0c 和 xff0c 输 xff1b 这里是描述比赛的结果 例2 xff1a 一周7天中的俩种结果 xff0c 工作日和非工作日
  • enum to string c++17 Magic Enum

    Magic Enum header only library provides static reflection for enums to string from string iteration for C 43 43 17 c 43
  • 枚举(enum)

    一 什么是枚举 我们学习过单例模式 xff0c 即一个类只有一个实例 而枚举其实就是多例 xff0c 一个类有多个实例 xff0c 但实例的个数不是无穷的 xff0c 是有限个数的 例如word文档的对齐方式有几种 xff1a 左对齐 居中
  • C/C++中枚举类型enum使用

    1 说明 xff1a 枚举enum的出现 xff0c 主要是为了解决一些特定属性的赋值 xff0c 变量取值仅在一定有限范围内的问题 例如一年只有十二个月取值 xff0c 一个星期只有七天情况 xff0c 人的性别只有男女两种等 这些属性如
  • C++中enum与字符串或CString互相转换的方法

    C 43 43 中没有专门为enum与字符串或CString互相转换的直接方法 xff0c 但是工作中会常遇到相互转换的场景 下面介绍一种自己实现的方法 xff0c 首先得定义一个enum类型 xff0c 同时 xff0c 定义一个与之对应
  • 推荐一个C++枚举转字符串的开源项目magic_enum

    文章目录 前言magic enum简单介绍具体使用原理简述局限性 简化与改进总结 前言 C 43 43 11引入了强类型的枚举类 enum class 用来代替旧风格枚举enum xff0c 新引入的 enum class 具有诸多优点 x
  • 枚举(enum)

    一 什么是枚举 我们学习过单例模式 xff0c 即一个类只有一个实例 而枚举其实就是多例 xff0c 一个类有多个实例 xff0c 但实例的个数不是无穷的 xff0c 是有限个数的 例如word文档的对齐方式有几种 xff1a 左对齐 居中
  • 【Mybatis】No enum constant org.apache.ibatis.type.JdbcType.LONG

    问题描述 xff1a 今天编写定时任务管理模块 xff0c 提交定时任务实体信息时 xff0c 提示如下错误 nested exception is org apache ibatis builder BuilderException Er
  • C语言--符号常量

    在C语言中 可以用一个标识符来表示一个常量 称之为符号常量 其特点是编译后写在代码区 不可寻址 不可更改 属于指令的一部分 一 符号常量定义用 define 符号常量在使用之前必须先定义 其一般形式为 形式为 define 标识符 常量 e
  • 枚举类中通过code值获取对应的desc值

    Getter NoArgsConstructor public enum TaskRecordTypeEnum STOPTASK 0 禁用任务 STARTTASK 1 启用任务 private int code private String
  • C# 枚举 enum(学习心得 17)

    枚举是一组命名整型常量 枚举类型是使用 enum 关键字声明的 C 枚举是值类型 枚举包含自己的值 且不能继承或传递继承 超级小白友好 讲解C 基础 每集5分钟轻松学习 拒绝从入门到放弃 声明 enum
  • C语言枚举类型的大小

    主流编译器如 gcc vc MinGW gcc等枚举变量均为4字节 少量编译器会根据枚举个数做优化 如只有3个枚举值时 size可能为1 enum长度不确定会带来可移植性问题 如果第三方库API接口使用enum类型 编译和调用库时一旦有关e
  • 浅谈Java Enum作用与应用场景

    在实际应用中 有的变量只有几种可能取值 如人的性别只有两种可能取值 星期只有七种可能取值 在 Java语言中对这样取值比较特殊的变量可以定义为枚举类型 所谓枚举是指将变量的值一一列举出来 变量只限于列举出来的值的范围内取值 枚举是一个特殊的

随机推荐

  • pwntools, terminal =‘tmux‘ 报错

    pwntools terminal 61 tmux 报错 Traceback most recent call last File exp py line 4 in gdb attach File home pwn pwn lib pyth
  • 更改手动导入的wsl的默认登录用户

    导入了一个wsl后 xff0c 每次登录都是root用户 xff0c 这个就有点不太好 网上的教程都是说在ps里用分发版的对应exe文件来设置默认用户 xff0c 但是导入的这个wsl我没找到这个exe 找了半天然后看了微软官方的教程 xf
  • v8安装fetch不上

    大佬方案 xff1a 白嫖github action 感谢大佬
  • pwnabletw-babystack

    BabyStack 思路 危险函数 xff0c strcpy 在copy的时候strcpy看似没有问题 xff0c 但是由于src的内容并没有清空 xff0c 还保存着被销毁栈的原有数据 xff0c 而strcpy是根据 34 x00 34
  • vmware win7虚拟机安装vmtools坑

    win7镜像下载 要下带SP1这个记号的 xff0c 表示有service pack 1这个补丁的 一定一定记得 xff0c 不然vmtools装不上 补丁 vmtools安装期间有很多驱动安不上的话 xff0c 首先 xff0c 安装一个
  • Python学习第10天——GUI初步

    Python学习第10天 1 多个库2 所写的代码 1 多个库 图形开发界面的库 Tkinter xff1a Tkinter 模块 Tk 接口 是 Python 的标准 Tk GUI 工具包的接口 Tk 和 Tkinter 可以在大多数的
  • IO扩展芯片PCF8574的中断引脚的理解

    The PCF8574 device provides an open drain output INT that can be connected to the interrupt input of a microcontroller A
  • java中的字符转换为数字 十进制转为二进制

    java中的字符转整数 span class token comment 方式1 span span class token keyword char span c span class token operator 61 span spa
  • xshell登录 安卓手机

    局域网远程连接手机 通过ssh登录到手机 Termux安装Termux安装openssh启动sshd服务配置登录密钥方法1方法2 手机查看当前用户名手机查看当前ip电脑cmd ssh到手机电脑xshell连接到ssh手机 通过ssh登录到手
  • vscode插件之Linux相关插件

    Linux相关插件 1 Remote SSH 远程连接插件2 shell format 代码格式化工具3 shellman 代码语法提示4 Linux ansible 语法提示5 皮肤设置5 1 Dracula Official5 2 ta
  • linux-优化 PS1

    PS1 记录 span class token builtin class name export span span class token assign left variable span class token environmen
  • cmd 设置 路由 route

    查询路由 route print 删除单条路由 route delete span class token number 192 168 span 4 0 span class token punctuation span 网络地址 spa
  • samba 共享文件 Linux 为共享端 windows 为客户端

    1 安装samba yum span class token parameter variable y span span class token function install span samba 2 创建新用户 创建共享目录 配置s
  • dell 服务器 重装Linux系统

    dell 服务器 从U盘启动安装linux系统 工具 xff1a linux 系统 U盘启动盘 参考博客 ultraISO 制作 linux系统U盘启动盘 U盘启动盘接入dell服务器USB接口 尽量拆入 服务器后面的u口 1 开机启动de
  • LINUX安装openssl

    openssl 官网下载 https www openssl org source old 1 解压openssl包 xff1a span class token function tar span span class token par
  • 设置win服务器代理

    在Windows系统下 xff0c 可以使用以下命令设置代理地址 开启和关闭代理 xff1a 1 设置代理 netsh winhttp span class token builtin class name set span proxy m
  • docker frp搭建http代理

    docker compose yml version span class token string 34 2 34 span services frpc image alpine latest hostname frpc restart
  • Proxmox VE 套娃做pve集群实验ceph搭建及ha迁移 超融合

    纯粹是为了折腾 xff1a xff09 1 环境介绍 存储也可以说是超融合 OS xff1a Virtual Environment 6 2 4 pve231 主机 pve118 172 16 1 118 虚拟机1 pve119 172 1
  • docker-compose搭建lnmp环境

    使用命令创建文件和文件夹 span class token function mkdir span p span class token punctuation span php nginx span class token punctua
  • Qt Q_ENUM使用 枚举字符串互转

    目录 1 简述2 Q ENUM用法2 1 声明使用2 2 测试例子 3 用模板实现一个字符串枚举互转3 1代码3 2 用法示例 1 简述 数据库里用到了枚举的存储 xff0c 比如一个设备有两个状态 xff0c 保持数据库和代码的可读性 x