C++和QML之間傳輸JSON字符串並解析(適用於傳數組或其他複雜參數)

  QJsonObject轉爲QString,發送帶此QString的信號,QML中接收到信號後直接用JSON進行解析(QML支持Javascript,自然也支持相應的json解析)。同理,可以在QML中將javascript對象先轉換成json字符串,然後傳給C++進行解析。這種方法可以用來傳輸比較複雜的數組參數,之前都是用的QVariantList和QVariantMap,感覺好不方便,所以在這裏記錄一下。

QFile loadFile("./test.txt");
if(!loadFile.open(QIODevice::ReadOnly))
{
    qDebug()<<"Could't open json data file!";
}
QByteArray allData = loadFile.readAll();
loadFile.close();

QJsonParseError json_error;

QJsonDocument jsonDoc(QJsonDocument::fromJson(allData, &json_error));

if(json_error.error != QJsonParseError::NoError)
{
    qDebug() << "Parse json error!";
        return;
}
callQmlLoadCali (QString(allData));//將Json格式標定數據以QString的形式傳給QML界面,這裏的callQmlLoadCali是一個帶QString參數的信號,這裏爲了方便直接用了讀取的數據,如果是QJsonObject的話也可先轉成QJsonDocument,再轉成QString

//其他操作
Connections{
	target:testTarget
	onCallQmlLoadCali:{
	var rootObject = JSON.parse(jsonString);//可以直接解析的
	console.log(rootObject.Points[0].x);
	}
}

json文件格式:

{
    "Points": [
        {
            "x": 0.3,
            "y": 0.3
        }
    ]
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章