2016-04-12 57 views
1

需求:從一個人類可讀/可編輯的文件讀取/寫入標準Qt類型的結構。使用QTextStream反序列化?

試過:QSettings。讓它工作起來相當容易。問題:QSettings會定期自動調用QSettings :: sync(),並在dtor。我需要確保設置文件僅根據請求進行更新,並且該運行時數據結構僅根據請求進行修改。

試過:QDataStream。問題:不可讀/可編輯。

試過:手動序列化和反序列化,使用標準readline和QString :: toInt()等。我現在必須支持QSettings支持的類型,但是QString沒有'toFoo()'方法。這種方式會很多,更多的編碼。

有沒有一種方法來序列化和反序列化人類可讀數據而不使用QSettings?有關它的一切都是違反要求的。這些文件應該以不同的方式命名。訪問應該被控制不同。

如果簡單地阻止sync(),這可能就足夠了。我們可能可以解決其他任何問題。這是「同步」,給我最多的問題。

+1

您可以不使用'QSettings'作爲您類的成員變量,而是根據您的要求在代碼的不同位置創建或刪除的局部變量。 – Tarod

+0

用QTextStream獲得什麼問題? –

+0

如果你想要人類可讀,那麼使用JSON做你自己的序列化可能是值得的。這裏有一個例子:http://doc.qt.io/qt-5/qtcore-json-savegame-example.html –

回答

0

在查看QSettings的源代碼後,它看起來似乎以獨特的方式執行了可讀的序列化 - 反序列化。 Qt的其他部分似乎沒有這個工具。此外,文件系統自動更改的地方有很多。

這在Qt中是不可能的。