1.Qt4
代码如下(示例):
#ifndef CLASSENUM_H
#define CLASSENUM_H
#include <QObject>
#include <QMetaEnum>
#include <QString>
class ClassEnum:public QObject
{
Q_OBJECT
public:
enum Color
{
red,
green,
black
};Q_ENUMS(Color)
explicit ClassEnum(QObject *parent = 0):QObject(parent)
{
}
template<typename Enums>
static QString enmToStr(Enums e,QString enumTypeStr,const QMetaObject& mo)
{
int index = mo.indexOfEnumerator(enumTypeStr.toStdString().data());
QMetaEnum metaEnum = mo.enumerator(index);
QString enumStr = metaEnum.valueToKey(e);
return enumStr;
}
template<typename Enums>
static Enums strToEnm(QString enumTypeStr,QString enumStr,const QMetaObject& mo)
{
int index = mo.indexOfEnumerator(enumTypeStr.toStdString().data());
QMetaEnum metaEnum = mo.enumerator(index);
Enums enums =(Enums) metaEnum.keyToValue(enumStr.toStdString().data());
return enums;
}
};
#endif // CLASSENUM_H
2.调用
代码如下(示例):
#include <QCoreApplication>
#include <classenum.h>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
const QMetaObject& mo = ClassEnum::staticMetaObject;
ClassEnum::Color c = ClassEnum::strToEnm<ClassEnum::Color>("Color","black",mo);
QString str = ClassEnum::enmToStr<ClassEnum::Color>(ClassEnum::green,"Color",mo);
return a.exec();
}