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

锦州做网站公司合肥百度seo排名

锦州做网站公司,合肥百度seo排名,徐州市建设局交易网站,erp管理软件公司文章目录 一、概述二、Qt 中定义和使用枚举2.1 普通枚举的定义方式2.2 使用枚举 三、配合 Qt 元对象系统使用枚举3.1 使用 Q_ENUM(Qt 5.5 及以上)3.2 示例:枚举值转字符串3.4 示例:字符串转枚举值 四、枚举与字符串相互转换五、枚…

文章目录

    • 一、概述
    • 二、Qt 中定义和使用枚举
      • 2.1 普通枚举的定义方式
      • 2.2 使用枚举
    • 三、配合 Qt 元对象系统使用枚举
      • 3.1 使用 Q_ENUM(Qt 5.5 及以上)
      • 3.2 示例:枚举值转字符串
      • 3.4 示例:字符串转枚举值
    • 四、枚举与字符串相互转换
    • 五、枚举与字符串相互转换(通用版)

一、概述

  在 Qt 中,枚举(enum)是一种用于表示一组具有名称的整型常量的类型,广泛用于状态表示、选项设置、信号与槽的参数传递等场景。Qt 的枚举使用方式和 C++ 的标准 enum 类似,但 Qt 也提供了更强的功能,如与 QMetaObject 系统结合、配合 Q_ENUM 或 Q_ENUMS 宏实现枚举值的字符串转换等。

二、Qt 中定义和使用枚举

2.1 普通枚举的定义方式

class MyClass : public QObject {Q_OBJECT
public:enum Status {Idle,Running,Stopped};void setStatus(Status s);
};

2.2 使用枚举

MyClass obj;
obj.setStatus(MyClass::Running);

三、配合 Qt 元对象系统使用枚举

3.1 使用 Q_ENUM(Qt 5.5 及以上)

class MyClass : public QObject {Q_OBJECT
public:enum Status {Idle,Running,Stopped};Q_ENUM(Status)
};

这样做的好处是可以通过 QMetaEnum 反射地访问枚举值,比如将字符串转换为枚举值,或枚举值转换为字符串。

3.2 示例:枚举值转字符串

MyClass::Status status = MyClass::Running;
QMetaEnum metaEnum = QMetaEnum::fromType<MyClass::Status>();
QString name = metaEnum.valueToKey(status);  // 得到 "Running"

3.4 示例:字符串转枚举值

int value = metaEnum.keyToValue("Stopped");  // 得到 2

四、枚举与字符串相互转换

#include <QObject>
#include <QMetaEnum>class StatusHelper : public QObject
{Q_OBJECT
public:enum class Status {Idle = 1,Running,Finished,Error};Q_ENUM(Status)  // 注册枚举到 Qt 元对象系统// 枚举转字符串static QString enumToString(Status s){const QMetaObject &meta = StatusHelper::staticMetaObject;int index = meta.indexOfEnumerator("Status");QMetaEnum metaEnum = meta.enumerator(index);return metaEnum.valueToKey(static_cast<int>(s));}// 字符串转枚举static Status stringToStatus(const QString& str) {const QMetaObject &meta = StatusHelper::staticMetaObject;int index = meta.indexOfEnumerator("Status");QMetaEnum metaEnum = meta.enumerator(index);int value = metaEnum.keyToValue(str.toUtf8().constData());if (value != -1)return static_cast<Status>(value);elsereturn static_cast<Status>(-1); // 或者你定义一个 Invalid 值}
};

代码调用:

#include <QApplication>
#include <QDebug>int main(int argc, char *argv[])
{QApplication app(argc, argv);QString str = StatusHelper::enumToString(StatusHelper::Status::Idle);qDebug() << "str:" << str;StatusHelper::Status s = StatusHelper::stringToStatus(str);qDebug() << s;return app.exec();
}

输出结果:
在这里插入图片描述

五、枚举与字符串相互转换(通用版)

class StatusHelper : public QObject
{Q_OBJECT
public:enum class Status {Idle = 1,Running,Finished,Error,Unknown};Q_ENUM(Status)  // 注册枚举到 Qt 元对象系统// 枚举转字符串template<typename T>static QString enumToString(const QString& strEnumType, T value){const QMetaObject &metaObj = StatusHelper::staticMetaObject;const char* pEnumName = nullptr;// 遍历所有枚举元数据for (int i = 0; i < metaObj.enumeratorCount(); ++i) {QMetaEnum metaEnum = metaObj.enumerator(i);if (QString(metaEnum.name()) == strEnumType) {pEnumName = metaEnum.valueToKey(static_cast<int>(value));break;}}return pEnumName ? QString(pEnumName) : QString("Unknown");}// 字符串转枚举template<typename T>static T stringToEnum(const QString& strEnumType, const QString& strKey, T defaultValue){const QMetaObject &metaObj = StatusHelper::staticMetaObject;for (int i = 0; i < metaObj.enumeratorCount(); ++i) {QMetaEnum metaEnum = metaObj.enumerator(i);if (QString(metaEnum.name()) == strEnumType) {bool bRet = false;int iValue = metaEnum.keyToValue(strKey.toUtf8().constData(), &bRet);if (bRet) {return  static_cast<T>(iValue);}}}return  defaultValue;}
};

代码调用:

#include <QApplication>
#include <QDebug>int main(int argc, char *argv[])
{QApplication app(argc, argv);QString str = StatusHelper::enumToString("Status", StatusHelper::Status::Idle);qDebug() << "str:" << str;StatusHelper::Status s = StatusHelper::stringToEnum("Status", str, StatusHelper::Status::Unknown);qDebug() << s;return app.exec();
}

输出结果:
在这里插入图片描述

http://www.dtcms.com/wzjs/458512.html

相关文章:

  • 义乌做网站zisou8搜狗友链交换
  • 参考网是合法网站吗?今日头条搜索优化
  • 微网站策划方案专业百度seo排名优化
  • 网站的关键词排名怎么做武汉关键词排名工具
  • 郑州建立网站网站seo怎么做
  • 最简单的做网站的软件智能营销系统
  • 营销型网站设计思路贵港seo关键词整站优化
  • 广州做网络服装的网站建设软文营销的优势
  • php网站开发教程培训网店运营怎么学
  • 芜湖住房和城乡建设委员会网站百度资源共享链接分享组
  • 58同城石家庄网站建设谷歌网站优化
  • win7 做网站服务器互联网金融营销案例
  • 天津网站建设zhy88网络推广怎么做效果好
  • 北京城乡建设委员会网站共有产权房优化营商环境工作开展情况汇报
  • 钥匙借用微信小程序免费制作平台长尾词优化外包
  • 英语网站online百度如何做广告
  • 出库入库管理软件app潮州seo建站
  • 南京电商网站开发广州全网推广
  • discuz 手机网站模板长沙网站定制公司
  • lol网站怎么做太原网站建设制作
  • 为什么建设银行网站打不开seo优化一般包括
  • 什么是网站的tdk东莞网站建设快速排名
  • 郑州 网站建设靠网络营销火起来的企业
  • 浙江建设职业技术学院提前招网站成都网站seo收费标准
  • 2018网站外链怎么做镇江交叉口优化
  • 京东商城 网站建设百度seo排名点击
  • 外贸网站建设基础我赢网seo优化网站
  • 写一个网站it培训机构哪个好
  • 网站开发公司凭证盘古百晋广告营销是干嘛
  • 设计师专用网站bt最佳磁力搜索引擎