2017-07-06 5 views
1

Je souhaite transmettre les paramètres enregistrés avec QSetting via deux instances d'une application, par exemple via un socket.Est-il possible de sérialiser QSettings et ensuite de les récupérer?

Je ne voyais aucune fonction dans la documentation officielle. La seule chose que je lis est par exemple ce post

Save Configuration Settings to XML file in QT?

Mais je ne veux pas enregistrer les paramètres dans un fichier XML, par exemple dans Windows Je veux continuer à utiliser le Registre.

Je veux juste collecter tous les paramètres, et les passer à travers un socket. Et le récepteur pourrait vérifier les paramètres et éventuellement substituer ses propres paramètres avec les paramètres reçus. Eh bien, je suppose que je pourrais faire quelque chose de similaire en utilisant QSettings :: allKeys(), en vérifiant toutes les valeurs, convertir en chaînes, etc etc ... mais savez-vous s'il y a une fonction native dans Qt déjà implémentée?

Merci à tous à l'avance

+0

Vous pouvez essayer 'boost :: property_tree' pour cela. 'QSettings' n'est pas conçu pour de telles choses. Mais vous pouvez utiliser votre propre lecteur/graveur avec 'QSettings' (enregistrer le format personnalisé de QSettings). –

+0

Je suppose que vous pouvez simplement implémenter votre propre [WriteFunc] (http://doc.qt.io/qt-5/qsettings.html#WriteFunc-typedef) et [ReadFunc] (http://doc.qt.io/ qt-5/qsettings.html # ReadFunc-typedef) pour les sockets, il serait difficile de sérialiser un 'QMap' sur le réseau, il pourrait y avoir des fonctions d'aide que vous pouvez même utiliser. – xander

+0

Merci pour le commentaire, mais je ne veux pas enregistrer un autre format. Je veux utiliser le format natif pour chaque plate-forme. Je veux juste passer les paramètres d'une application à l'autre. Par exemple, dans Windows, je veux lire tous les paramètres dans le registre et les sérialiser afin de les envoyer dans un socket. Cela devrait être beaucoup plus simple .... – n3mo

Répondre

2

La meilleure solution que j'ai trouvé:

Créer une QMap de QSettings

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

Et puis l'écrire dans un QJson avec la fonction (voir la documentation officielle http://doc.qt.io/qt-5/qjsonobject.html)

QJsonObject :: fromVariantMap

puis de l'autre côté le récupérer avec

QJsonObject :: toVariantMap()

et réécrire les paramètres

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