Écrire et lire des cours personnalisés dans QSettings

Je dois stocker des instances d’une classe personnalisée dans le registre via QSettings. Après avoir lu la documentation de Qt, je pense avoir implémenté les fonctions nécessaires mais je ne parviens pas à enregistrer quoi que ce soit.

Voici mon cours personnalisé:

class SRSDefinition{ public: SRSDefinition(QSsortingng name, QSsortingng definition) : qsName(name), qsDefinition(definition) { qRegisterMetaType("SRSDefinition"); qRegisterMetaTypeStreamOperators("SRSDefinition"); } SRSDefinition(const SRSDefinition& original) : qsName(original.qsName), qsDefinition(original.qsDefinition) {} SRSDefinition() : qsName(""), qsDefinition(""){} ~SRSDefinition(); QSsortingng qsName; QSsortingng qsDefinition; private: friend QDataStream& operator << (QDataStream& out, const SRSDefinition& valeur) {out << valeur.qsName <> (QDataStream& in, SRSDefinition& valeur) {in >> valeur.qsName >> valeur.qsDefinition; return in;} }; Q_DECLARE_METATYPE(SRSDefinition) QDataStream& operator <> (QDataStream& in, SRSDefinition& Valeur); 

Enregistrement dans le registre:

 QSettings settings("Organization", "Application"); QVariant variant; variant.setValue(QVariant::fromValue(m_srsSelected)); settings.setValue("Shared/RecentSRS", variant); 

Chargement à partir du registre:

 QSettings settings("Organization", "Application"); m_srsSelected = settings.value("Shared/RecentSRS").value(); 

Une nouvelle clé dans le registre est créée, mais elle contient un code hexadécimal qui, à mon avis, n’est que le nom de la classe … entrez la description de l'image ici

Une idée de comment stocker efficacement les valeurs?

Utilisez qRegisterMetaTypeStreamOperators("YourType") pour activer la sérialisation / dé-sérialisation de types personnalisés avec QVariant. Cette fonction enregistre les fonctions d’entrée / sortie QDataStream de votre type dans le système de métatype de Qt afin qu’il puisse les appeler lors de l’enregistrement / du chargement d’une variante contenant votre type personnalisé.

 #include  #include  #include  struct CustomType { QSsortingng name; int age; }; Q_DECLARE_METATYPE(CustomType); QDataStream& operator<<(QDataStream& out, const CustomType& v) { out << v.name << v.age; return out; } QDataStream& operator>>(QDataStream& in, CustomType& v) { in >> v.name; in >> v.age; return in; } int main(int,char**) { qRegisterMetaTypeStreamOperators("CustomType"); { CustomType t; t.name = "John Smith"; t.age = 42; QSettings s("config.ini", QSettings::IniFormat); s.setValue("user", QVariant::fromValue(t)); } { QSettings s("config.ini", QSettings::IniFormat); QVariant value = s.value("user"); CustomType t = value.value(); qDebug() << t.name << t.age; } return 0; }