QT 快速构建简单枚举类,实现随用随取

2023-05-16

目录

1、QT 枚举类型enum 基本使用

2、QT QMetaEnum枚举器的基本使用 

3、QT 通过使用枚举类型enum和QMetaEnum枚举器构建一个简单的枚举类

4、QT 测试枚举类(简单调用和switch case使用)


1、QT 枚举类型enum 基本使用

         在.h文件中定义:

/* Roster枚举类型声明 */
    enum Roster
    {
        Tony,
        Shady,
        Bill,
        Teres,
        Presa
    };

    //Roster枚举类型注册
    Q_ENUM(Roster);

         在声明枚举类型时,若无特殊声明,枚举类型会自动分配,此时在Roster中声明的五个枚举类型会自动分配为整型,即Tony代表为0,Shady代表1...

        在.h文件中声明完后,还需要将声明好的枚举类型注册到QT系统中去,此时需要注意到是我们采用的Q_ENUM()宏注册需要在类内声明,并且此类还必须是继承于QObject和拥有Q_OBJECT宏。

        在.cpp文件中简单使用:

    Roster roster;
    roster = Tony;
    
    /* 此时条件①与条件②等价 */
    
    if(roster == Tony){    //条件①
        //执行代码1
    }
    
    if(roster == 0){    //条件②
        //执行代码2
    }

2、QT QMetaEnum枚举器的基本使用 

         首先要使用QMetaEnum枚举器必须包含头文件:

#include <QMetaEnum>

         QMetaEnum类是专门进行枚举类型进行数据存储、查找、转化等功能的类,通过QMetaEnum类自带的fromType<>()函数就能够将枚举类型的数据导入到QMetaEnum类中。QMetaEnum类自带的函数还有很多,有兴趣的小伙伴们可以自行去了解一下,在这里就不一一展开了。

//枚举类导入枚举器
    meta = QMetaEnum::fromType<Roster>();

3、QT 通过使用枚举类型enum和QMetaEnum枚举器构建一个简单的枚举类

        通过枚举类我们可以构建一个自己的枚举类型Ship,并且将它注册后转存到枚举器QMetaEnum中去,通过枚举器自带的函数就能够进行枚举类字符串和数字的映射关系了。

        在整个映射的过程中,运用到了一个中间容器QStringList,通过这个容器作为纽带就能将映射关系建立起来。话不多说,上代码:

        .h完整代码:

#ifndef ENUM_H
#define ENUM_H

#pragma once

#include <QObject>
#include <QWidget>
#include <QDebug>
#include <QMetaEnum>


class Enum : public QObject
{
    Q_OBJECT
public:
    Enum();
    ~Enum();

    /* 枚举类转化枚举器 */
    QMetaEnum meta;

    /* Roster枚举类型声明 */
    enum Roster
    {
        Tony,
        Shady,
        Bill,
        Teres,
        Presa
    };

    //Roster枚举类型注册
    Q_ENUM(Roster);

    /* Roster枚举类型的字符串导入位置 */
    QStringList name;


    /* Ship枚举类型声明 */
    enum Ship
    {
        ShipOf1,
        ShipOf2,
        ShipOf3,
        ShipOf4,
        ShipOf5
    };

    //Roster枚举类型注册
    Q_ENUM(Ship);

    /* Roster枚举类型的字符串导入位置 */
    QStringList ship;

    /**
     * @brief enumerateImports 枚举类导入函数方法
     * @param *list 字符串导入地址
     * @param data 枚举类对应的枚举器
     * @return void 无
     */
    void enumerateImports(QStringList *list,QMetaEnum data);

};

#endif // ENUM_H

        .cpp完整代码: 

#include "enum.h"

Enum::Enum()
    :QObject()
{
    //枚举类导入枚举器
    meta = QMetaEnum::fromType<Roster>();
    //枚举器导入QStringList
    enumerateImports(&name,meta);

    //枚举类导入枚举器
    meta = QMetaEnum::fromType<Ship>();
    //枚举器导入QStringList
    enumerateImports(&ship,meta);

}

Enum::~Enum()
{

}

void Enum::enumerateImports(QStringList *list, QMetaEnum data)
{
    for(int i = 0;i < data.keyCount();i++){
        QString enumStr = data.key(i);
        list->append(enumStr);
    }
}

        在这里我们写了一个建立纽带QStringList容器的通用办法的enumerateImports,在后面建立枚举类型的过程中,只需要调用这个通用函数即可。这样的话,建立一个完整的枚举类只需要几句代码就能够实现。

4、QT 测试枚举类(简单调用和switch case使用)

        .h文件中:

//实例化Enum类
    Enum allOfEnum;

          .cpp文件中测试效果:

//打印实例化类中的ship的字符串
    qDebug()<<allOfEnum.ship;
    //人为生成一个字符串变量
    QString shipExample = "ShipOf2";
    switch (allOfEnum.ship.indexOf(shipExample)) {
        case Enum::ShipOf1 :
        qDebug()<<"ShipOf1 is sail";
        break;
        case Enum::ShipOf2 :
        qDebug()<<"ShipOf2 is sail";
        break;
        case Enum::ShipOf3 :
        qDebug()<<"ShipOf3 is sail";
        break;
        case Enum::ShipOf4 :
        qDebug()<<"ShipOf4 is sail";
        break;
        case -1 :
        qDebug()<<"switch condition is error";
        break;
        default:
        qDebug()<<"QStringList is error";
        break;
    }

         输出结果:

 

        通过建立的映射关系实现switch case字符串使用,并且结构逻辑清晰,对于后续开发者也是十分友好的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QT 快速构建简单枚举类,实现随用随取 的相关文章

  • 【Ubuntu-22.04.2新手安装教程】

    新手安装教程 很多小伙伴在Ubuntu的安装上总会有疑问 xff0c 今天就来给小可爱们来一套完整的Ubuntu快速安装教程 VMware Workstation Pro安装 本多的VMware Workstation Pro是从电脑管家那
  • MySql 数据库查看视图的创建sql语句

    在网上能找到大量的视图创建 修改 删除的语句 xff0c 但是查看创建语句的语句不好找 show create view VIEW NAME
  • 踩坑!WSL2报错:docker unrecognized service

    WSL2安装Docker后执行 sudo service docker start 报错 xff1a docker unrecognized service实录 在WSL中安装Docker要使用命令 xff1a curl https get
  • docker-compose安装教程

    docker compose安装教程 一 docker compose简介二 安装docker compose 1 下载docker compose2 运行 96 docker compose 96 xff0c 提示权限不够3 添加权限4
  • linux下gzip

    gunzip file1 gz 解压一个叫做 39 file1 gz 的文件 gzip file1 压缩一个叫做 39 file1 的文件 gzip 9 file1 最大程度压缩
  • Ubuntu18.04 更新后无法进入系统

    参考博客 xff1a http tieba baidu com p 5854786601 traceid 61 经常看到很多朋友说ubuntu系统更新后 xff08 特别是linux内核更新后 xff09 重新启动时进不了桌面 xff0c
  • 数学分析 - 隐函数

    简介 xff1a 用多元函数 xff08 隐函数中自变量和因变量同时存在的表达式的作为多元函数的表达式 xff09 的思维来分析隐函数 隐函数的概念 定义 xff1a 隐函数的定义 xff08 一个多元函数F x y 构成的方程F x y
  • Error occurred while trying to proxy request项目突然起不来了

    1 如果你是之前还能项目能正常运行 xff0c 突然启不来了 xff0c 或者别人启起来 xff0c 你启不来 xff0c 请尝试以下办法 xff08 1 xff09 npm版本过低 步骤一 xff1a 查看npm版本 xff1a npm
  • Docker Debian安装Docker

    Debian安装Docker 内容由 网络搜罗整理而来 xff0c 记录与共享 一 APT安装 官方Debian存储库中提供的Docker安装包可能不是最新版本 为了确保我们获得最新版本 xff0c 我们将从官方Docker存储库安装Doc
  • 使用VsCode配置MySQL实现连接、查询、等功能

    场景 xff1a 使用VsCode配置MySQL实现连接 查询 等功能 xff08 mrx xff09 步骤 xff1a 打开vscode左边的拓展栏 1 搜索MySQL MySQL Syntax两个插件 xff0c 并安装 xff1b 2
  • centos7安装mysql5.7步骤(图解版)

    目录 一 下载mysql5 7安装包 二 mysql5 7安装包上传到linux服务器 三 检查系统是否安装过mysql 四 卸载CentOS7系统自带mariadb 五 检查有无安装过mysql 用户组 没有的话创建 六 安装mysql5
  • IDEA报错之Failed to start bean ‘documentationPluginsBootstrapper‘问题及解决方案

    笔者今日创建一个Spring Boot 项目准备做产品 基于IDEA搭建是非常容易的 但是万万没想到 居然一切顺理成章的创建之后 运行报错 非常痛惜 错误截图如下 核心错误 Failed to start bean documentatio
  • Linux界面和字体大小调整

    1 调整桌面显示屏幕大小 点击页面上方的系统 gt 首选项 gt 显示 点击显示后出现显示器分辨率调节 xff0c 将分辨率选择最大基本可以覆盖虚拟机整个屏幕 2 调整屏幕字体大小 点击页面上方的系统 gt 首选项 gt 外观 选择字体栏
  • SQL语句:分组查询

    在对数据表中数据进行统计时 xff0c 可能需要按照一定的类别分别进行统计 比如查询每个部门的员工数 使用GROUP BY按某个字段 xff0c 或者多个字段中的值 xff0c 进行分组 xff0c 字段中值相同的为一组 语法格式 查询列表
  • Ubuntu18.04安装后基础配置(换源+WIFI适配+ROS+VScode)

    简单记录一下 xff0c 新安装好的Ubuntu系统 xff0c 需要什么初始化步骤呢 xff1f 1 建议首先换源 xff0c 换清华源 xff08 需要插网线 xff09 首先连接网线 xff0c 系统需要有网络环境 打开 软件和更新
  • PyInstaller库—Python第三方库—程序打包

    PyInstaller的作用是将Python源文件 xff08 py xff09 打包 xff0c 变成直接可运行的可执行文件 首先需要下载安装PyInstaller库 xff0c 在cmd 中输入pip install PyInstall
  • vcpkg问题-环境配置

    参考博客 xff1a Visual Studio开源库集成器Vcpkg全教程 利用Vcpkg轻松集成开源第三方库 https blog csdn net cjmqas article details 79282847 先说一些装好以后注意的
  • PVE系统安装

    PVE是专为家庭设计打造的 xff0c 永久免费的开源平台 xff0c 在低配置的小主机上都能轻松运行的一款轻量级平台 PVE是专业的虚拟机平台 xff0c 提供一个家庭设备集中管理平台 xff0c 你可以利用它安装任何你想要的系统 1 制
  • 初识c语言系列-1-第一个c语言程序

    目录 1 61 61 该系列的介绍 61 61 2 61 61 未来的打算 61 61 3 61 61 简单介绍c语言 61 61 4 61 61 第一个c语言程序 61 61 1 该系列的介绍 首先呢 xff0c 开始这个系列之前呢 xf
  • NestJS 项目实战 需求分析(文末附视频)

    前言 一般常规的项目立项之初会有一份 MRD xff08 Market Requirements Document xff0c 市场需求文档 xff09 用来判断产品的必需性以及价值等 对于基础项目开发来说 xff0c 使用 MRD 可能有

随机推荐