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