qt 开发笔记 json 自动转换实验

发布于:2024-07-04 ⋅ 阅读:(65) ⋅ 点赞:(0)

1.改用

读取json的配置文件能否想java和c#直接完成json字符串到对象的赋值呢,答案是不能?

能否用宏实现呢

比如:#define funMacro(json的键(变量名)) 变量名= jsonObject[#键].toInt();

这个看上去是个理想的选择,如果成功了,就能完成值和建的自动匹配了

但实际上失败了,因为宏的特点是变量可以变成字符串,而字符串的值却无法变成变量。

QString key = keys.at(i);
funMacro(a);

期待这个宏的结果是,如果变量和key的名称都是a

那么宏的结果是 key =  jsonObject["key "].toInt()

这显然不是我们想要的结果,可以直接用变量a

那么宏的结果是 a =  jsonObject["key "].toInt()

这结果对了,可是就无法实现自动的赋值了。

2.代码

2.1 main

 


#include "testmacro.h"

int main(int argc, char *argv[])
{
    TestMacro tm;
    qDebug() << "Hello, World!";
    return 0;
}

2.2 testmacro.h

 

#ifndef TESTMACRO_H
#define TESTMACRO_H

class TestMacro
{
public:
    TestMacro();
};

#endif // TESTMACRO_H

2.3 testmacromod.h

#ifndef TESTMACROMOD_H
#define TESTMACROMOD_H

#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>

class TestMacroMod
{
public:
    TestMacroMod();
    int a;
    void setJson(QJsonObject jsonObject);
};

#endif // TESTMACROMOD_H

 

2.4 testmacro.cpp

 

#include "testmacro.h"
#include "testmacromod.h"

TestMacro::TestMacro() {
    TestMacroMod tm;
    QJsonObject obj;
    obj.insert("a",7);
    tm.setJson(obj);
}

2.5 testmacromod.cpp

 

#include "testmacromod.h"
#include <QDebug>
#define funMacro(ms) ms = jsonObject[#ms].toInt();

TestMacroMod::TestMacroMod() {}

void TestMacroMod::setJson(QJsonObject jsonObject){
    a = jsonObject["a"].toInt();
    QStringList keys = jsonObject.keys();
    for(int i=0; i<keys.size(); ++i)
    {
        QString key = keys.at(i);
        funMacro(a);
    }
    qDebug() <<"a:"<< a;
}

3.运行结果

a: 7
Hello, World! 


网站公告

今日签到

点亮在社区的每一天
去签到