2017-07-06 92 views
1

我想通過QSetting保存的設置通過應用程序的兩個實例,例如通過套接字。是否可以序列化QSettings然後恢復它們?

我在官方文檔中看不到任何功能。我讀的唯一的事情是,例如這個帖子

Save Configuration Settings to XML file in QT?

但我不希望保存設置在一個XML文件中,例如在Windows我想繼續使用註冊表。

我只想收集所有的設置,並通過套接字傳遞它們。接收機可以檢查設置並最終用接收到的設置代替它自己的設置。那麼,我想我可以使用QSettings :: allKeys()來做類似的事情,檢查所有的值,轉換爲字符串等等等等......但是你知道Qt中是否有一些本地函數已經實現了嗎?

感謝大家提前

+0

你可以試試'的​​boost :: property_tree'了點。 'QSettings'不是爲這些東西設計的。但是你可以使用你自己的讀寫器'QSettings'(註冊QSettings自定義格式)。 –

+0

我想你可以實現你自己的[WriteFunc](http://doc.qt.io/qt-5/qsettings.html#WriteFunc-typedef)和[ReadFunc](http://doc.qt.io/ qt-5/qsettings.html#ReadFunc-typedef)套接字,要想很難通過網絡序列化一個'QMap',可能會有一些輔助函數甚至可以使用。 – xander

+0

感謝您的評論,但我不想註冊另一種格式。我想爲每個平臺使用本機格式。我只想將設置從一個應用程序傳遞到另一個應用程序。例如在Windows中,我想讀取註冊表中的所有設置,並將它們序列化以便將它們發送到套接字中。它應該更簡單.... – n3mo

回答

2
,我發現

最好的解決辦法:

創建一個從QSettings

一個QMAP
QMap<QString, QVariant> keysValuesPairs; 
QStringList keys = settings.allKeys(); 
QStringListIterator it(keys); 
while (it.hasNext()) 
{ 
    QString currentKey = it.next(); 
    keysValuesPairs.insert(currentKey, settings.value(currentKey)); 
} 

然後它與功能的QJson書寫(參見官方文檔http://doc.qt.io/qt-5/qjsonobject.html

QJsonObject :: fromVariantMap

然後在另一側

QJsonObject :: toVariantMap()

恢復並重寫的設置

for (int i = 0; i < keys.size(); i++) 
{ 
    settings.setValue(keys.at(i), keysValuesPairsMap.value(keys.at(i))); 
} 
相關問題