Qt的json对象不具备类似指针、引用的行为导致的更新不成功问题解决
如下代碼:
QJsonArray actionsArray; QJsonObject totalRootJson; totalRootJson.insert("actionsArray", actionsArray); /*此處為更新actionsArray的代碼,如:actionsArray.append(actionScripts); // 向數組 actionsArray添加一個json的actionScripts對象*/// 這里再訪問totalRootJson調用QJsonObject的insert向totalRootJson插入一個QJsonArray類型的actionsArray,然后再更新actionsArray對象,如:追加一個QJsonObject的對象到actionsArray對象,然后再訪問totalRootJson對象,發現totalRootJson的actionsArray節點還是未更新之前的,即actionsArray節點未追加任何子節點。也就是說Qt的json對象不像指針、引用那樣被改動、被更新就立馬能在整個json文檔中反應出來,解決上面的問題是,把更新放在insert前面,如下:
QJsonArray actionsArray; QJsonObject totalRootJson;/*此處為更新actionsArray的代碼,如:actionsArray.append(actionScripts); // 向數組 actionsArray添加一個json的actionScripts對象*/totalRootJson.insert("actionsArray", actionsArray);又例如下json:
{"actionScriptsGenerator": [{"currentActionId": 0,"moduleName": "Untitled0"},{"currentActionId": 0,"moduleName": "2"}]}?當要更新節點的值時,如:更新moduleName的值,則調用如下代碼:
Obj.insert("moduleName", “dansir”);按照qtassist的解釋,如果指定的鍵存在了,則更新,調試發現obj的moduleName對應的值確實更新了,但是查看包含obj的高層節點(即obj作為其它節點的子對象,本例為actionScriptsGenerator數組的第一個元素或json根文檔對象),發現obj沒有變化,還是原來的值。解決方法如下:
QJsonObject newObj; newObj.insert("moduleName", "dansir"); actionScriptsGenerator.replace(0, newObj);其中actionScriptsGenerator為QJsonArray對象,0表示actionScriptsGenerator數組對象的第一個元素即obj對象,即用新值創建一個新對象,然后用這個新對象替換掉原來舊的對象。
總結
以上是生活随笔為你收集整理的Qt的json对象不具备类似指针、引用的行为导致的更新不成功问题解决的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt::WindowType、Qt::W
- 下一篇: 玩游戏红轴还是银轴好