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
}
]
}