我想以JSON格式保存一些信息。
考虑以下代码段。我在save()
方法中出错,其中将类型为enum class
的变量分配为QJsonValue
。
在这种情况下如何使用enum class
?
谢谢
class MyClass : public QObject
{
Q_OBJECT
public:
enum class Status { Undefined, S1, S2 };
Q_ENUM(Status)
explicit MyClass(QObject *parent = nullptr);
void save(QString filename) {
//...
QJsonObject jsonObj;
jsonObj["id"] = m_id;
jsonObj["status"] = m_status; //<-- Error: no known conversion from 'MyClass::Status' to 'const QJsonValue' for 1st argument
//...
//Save QJsonDocument into target file
}
private:
QString m_id;
MyClass::Status m_status;
//...
};
注意:如果我将enum class
更改为旧的enum
,则此代码可以正常工作。但是使用enum class
不会被编译。
更多信息:请参阅Qt源中的JSON Save Game Example
。它具有一个名为Character
的类,并且具有一个名为enum
的传统ClassType
。尝试将enum
更改为enum class
。它不会起作用。如何使其正常工作?
答案 0 :(得分:3)
您可以将enum class
转换为QVariant
并将其分配给QJsonValue
:
jsonObj["status"] = QVariant::fromValue(m_status).toJsonValue();
答案 1 :(得分:2)
从这里:https://en.cppreference.com/w/cpp/language/enum
尽管可以使用static_cast来获取枚举器的数值,但没有从范围内的枚举器的值到整数类型的隐式转换。
所以这应该起作用:
class MyClass : public QObject
{
Q_OBJECT
public:
enum class Status { Undefined, S1, S2 };
Q_ENUM(Status)
explicit MyClass(QObject *parent = nullptr);
void save(QString filename) {
//...
QJsonObject jsonObj;
jsonObj["id"] = m_id;
jsonObj["status"] = static_cast<int>(m_status); //<-- Error: no known conversion from 'MyClass::Status' to 'const QJsonValue' for 1st argument
//...
//Save QJsonDocument into target file
}
private:
QString m_id;
MyClass::Status m_status;
//...
};