2013-08-09 8 views
9

मैं QSettings के माध्यम से रजिस्ट्री में एक कस्टम वर्ग के उदाहरण संग्रहीत करने की आवश्यकता को पढ़ने कस्टम वर्ग। क्यूटी के दस्तावेज़ से पढ़ने के बाद, मुझे लगता है कि मैं जरूरत कार्यों को लागू किया है, लेकिन मैं कुछ भी बचाने के लिए प्रबंधित नहीं करते।लेखन और QSettings

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

सहेजा जा रहा है रजिस्ट्री में: रजिस्ट्री से

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

लोड हो रहा है:

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

रजिस्ट्री में एक नया कुंजी बनाई गई है, लेकिन

यहाँ मेरी कस्टम वर्ग है यह हेक्स कोड मुझे लगता है कि सिर्फ क्लास का नाम है शामिल हैं ... 012,

किसी भी विचार कैसे प्रभावी रूप से मान संग्रहीत करने के लिए?

उत्तर

15

उपयोग qRegisterMetaTypeStreamOperators<YourType>("YourType") QVariant के साथ कस्टम प्रकार के क्रमांकन/de-क्रमबद्धता सक्षम करने के लिए। इस समारोह क्यूटी के metatype सिस्टम के साथ अपने प्रकार के QDataStream इनपुट/आउटपुट कार्यों पंजीकृत करता है इतना है कि यह उन्हें आह्वान कर सकते हैं/जब बचत एक प्रकार अपने कस्टम प्रकार युक्त लोड हो रहा है।

#include <QtCore/QDebug> 
#include <QtCore/QDataStream> 
#include <QtCore/QSettings> 

struct CustomType { 
    QString 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"); 

    { 
     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<CustomType>(); 

     qDebug() << t.name << t.age; 
    } 


    return 0; 
} 
+0

दरअसल, बस चलती 'qRegisterMetaTypeStreamOperators (" SRSDefinition ");' मुख्य करने के लिए मेरी समस्या हल। बहुत बहुत धन्यवाद !!! – Ote

संबंधित मुद्दे