將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;
}