前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt技巧-枚举与字符串互相转换

Qt技巧-枚举与字符串互相转换

作者头像
Qt君
发布2019-07-15 17:48:39
2.3K0
发布2019-07-15 17:48:39
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

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

1 使用方法

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

2 枚举转字符串

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

3 字符串转枚举

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

4 注意事项

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

5 示例

示例

  • Car.h
代码语言:javascript
复制
#include <QObject>

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

    enum Color { RED, GREEN, BLUE };
    Q_ENUM(Color)
};
  • main.cpp部分代码
代码语言:javascript
复制
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;
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 使用方法
  • 2 枚举转字符串
  • 3 字符串转枚举
  • 4 注意事项
  • 5 示例
  • 示例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档