将enum中定义的枚举值,以字符串的形式写入文件,同时也能从字符串转为枚举值。举例说明:
ColorSelector中的Colors枚举,我们希望 kColorRed 这个写入到本地文件时,可以直接保存“kColorRed”,而非kColorRed对应的值(100)。但是从本地文件读取到“kColorRed”时,可以转换为对应的值(100)。
头文件
#ifndef ENUMCLASS_H
#define ENUMCLASS_H#include <QObject>class ColorSelector : public QObject
{Q_OBJECT
public://enum Colors{kColorRed=100,kColorGreen,kColorBlue,kColorGray,kColorBlack,kColorPink,kColorBrown,kColorOrange,kColorDark,};Q_ENUM(Colors);public:explicit ColorSelector(QObject *parent = nullptr);void output();
signals:};#endif // ENUMCLASS_H
cpp文件
#include "enumclass.h"
#include <QMetaEnum>
#include <QDebug>ColorSelector::ColorSelector(QObject *parent) : QObject(parent)
{}void ColorSelector::output()
{QMetaEnum metaEnum;metaEnum = QMetaEnum::fromType<Colors>();int val = metaEnum.keyToValue("kColorBlack");qDebug() << "val=" << val;Colors clr = static_cast<Colors>(metaEnum.keyToValue("kColorBrown"));qDebug() << "clr=" << clr;QString key = metaEnum.valueToKey(clr);qDebug() << "key=" << key;QString key2 = metaEnum.valueToKey(kColorOrange);qDebug() << "key2=" << key2;qDebug() << "count=" << metaEnum.keyCount();
}
测试代码:
int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);ColorSelector cls;cls.output();return 0;
}