Qt에서 열거 형을 사용하여 QVariant에 팩을 포장하고 QJsonValue 및 이후 JSON으로 변환하도록 어떻게 생각해야하는지 궁금합니다. 내가 열거 형을 선언 결국 워드 프로세서에 따라Qt, QVariant, JSON 및 enums
:
enum BeautifulColors { Red, Green, Blue };
Q_DECLARE_METATYPE(BeautifulColors);
내가 값으로 내 사용자 정의 열거 형을 설정 QVariant
에 setValue(..)
을 사용할 수있는 방법입니다.
문제는 그러나 QJsonValue::fromVariant()
이며, 워드 프로세서는 말한다 :
가 QJsonValue에 변형을 변환하고 돌려줍니다. (...) 다른 모든 QVariant 유형의 경우 QString으로의 변환은 이 시도됩니다. 리턴 된 문자열이 비어 있으면 Null QJsonValue는 으로 저장되고, 그렇지 않으면 리턴 된 QString을 사용하는 String 값이 저장됩니다.
QString
로 변환하고 실패하고 내 QJsonValue
객체는 null 끝납니다.
다음은 혼동을줍니다. QObject 내에 열거 정의를위한 Q_EUM
매크로가 있습니다. 그러나 QObject는 복사 할 수 없기 때문에 QVariant가 그것을 가지고 있다고 생각하지 않습니다. 확실히 해키가 작동하도록하는 것이 분명하지만, 내가 찾던 것이 아닙니다. 열거 형을 정의하여 데이터 유형으로 사용하고 JSON으로 변환하고 JSON에서 읽을 수 있도록 Qt에서 권장되는 방법은 무엇입니까?
rectangle.h
#ifndef RECTANGLE_H
#define RECTANGLE_H
#include <QObject>
class Rectangle : public QObject
{
Q_OBJECT
public:
enum Color
{
Red,
Green,
Blue,
};
Q_ENUM(Color)
Rectangle(double x, double y, Color color, QObject *parent = 0);
private:
double _x;
double _y;
Color _color;
};
#endif
rectangle.cpp
#include "rectangle.h"
Rectangle::Rectangle(double x, double y, Rectangle::Color color, QObject *parent)
: QObject(parent)
, _x(x)
, _y(y)
, _color(color)
{
}
main.cpp
#include <QVariant>
#include <QDebug>
#include <QString>
#include "rectangle.h"
int main(int argc, char *argv[])
{
int id = qMetaTypeId<Rectangle::Color>();
Rectangle::Color blueColor = Rectangle::Blue;
QVariant myVariant;
myVariant.setValue(blueColor);
qDebug() << id;
qDebug() << myVariant.toString();
}
는 지금은 일반 ID와 문자열 표현이 있습니다
업데이트
는 다음과 같은 시도!
int idRectangle = qMetaTypeId<Rectangle>();
컴파일하지 않고는 생성자가 없기 때문에 나는
Q_DECLARE_MEATYPE
에 등록 할 수 없습니다하지만 클래스를 보유합니다. QVariants toString()을 사용하여 모든 클래스에서 작동해야하는 경우 어떻게해야합니까?
내가 지금 (다른) 얻을 열거하고 유지하는 클래스 ID를 입력 Q_GADGET 매크로를 사용하여 두 번째 업데이트
. 그러나 나는 열거 형에 대해서만 여전히 문자열 표현을 얻는다.
들으! – Nils