enum转QString

xiaoxiao2021-02-28  92

QMetaEnum 类提供了一个枚举的元数据。我们可以使用该类的静态模板函数,fromType<enumerator>来获得关于某个枚举的QMetaEnum对象,然后就可以调用该类的成员函数来获得该枚举的相关信息。该枚举必须使用Q_ENUM宏进行声明。

使用QT版本4.8.6

//.h文件

#ifndef MYCLASS_H #define MYCLASS_H #include <QObject> #include <QDebug> #include <QMetaEnum> class Myclass : public QObject {     Q_OBJECT public:     Myclass();     ~Myclass();     enum FPGACOMMAND     {         //门A         GATE_A,         //         GATE_B,         //         GATE_C,         //         GATE_I,         //门A         GATE_A1,         //         GATE_B1,         //         GATE_C1,         //         GATE_I1,     };     Q_ENUMS(FPGACOMMAND)     static QString getPinYin(int pinYinID);      }; #endif // MYCLASS_H

//.cpp文件

#include "Myclass.h" Myclass::Myclass() { } Myclass::~Myclass() { } QString Myclass::getPinYin(int pinYinID) {     const QMetaObject metaObject = Myclass::staticMetaObject;     int enumIndex = metaObject.indexOfEnumerator("FPGACOMMAND");     QMetaEnum en = metaObject.enumerator(enumIndex);     return  QString(en.valueToKey(pinYinID));

}

在用到的地方调用QString test = MyClass::getPinYin(1);即可。

对于.cpp文件中的getPinYin()函数,如果写成这样是没有办法用的:

反面例子:

QString MyClass::getPinYin(int pinYinID) { QMetaEnum metaEnum = QMetaEnum::fromType<MyClass::FPGACOMMAND>(); const char* pinYinChars=metaEnum.valueToKey(pinYinID); QString result(pinYinChars); return result; }

转载请注明原文地址: https://www.6miu.com/read-68473.html

最新回复(0)