Sérialisation, QVariant et QSettings : unable*to*load*type*256
Bonjour,
Je rencontre actuellement un problème lors de l'éxécution de mon programme.
J'ai des objet personnel (ChannelObjectSerializable) dont je souhaite sauvegarder l'état.
J'ai suivis un tutoriel, tout compile comme il faut, mais cela foire à l'exécution.
Voici les morceaux de code intéressant :
J'obtient donc :
Code:
1 2 3 4
|
QVariant::load:*unable*to*load*type*256.
QVariant::save:*unable*to*save*type*256.
QVariant::load:*unable*to*load*type*256. |
Avec :
ChannelObjectSerilizable.h
Code:
1 2 3 4 5 6 7 8
| private:
friend QDataStream & operator << (QDataStream &, const ChannelObjectSerializable &);
friend QDataStream & operator >> (QDataStream &, ChannelObjectSerializable &);
};
Q_DECLARE_METATYPE(ChannelObjectSerializable)
QDataStream & operator << (QDataStream & out, const ChannelObjectSerializable & Valeur);
QDataStream & operator >> (QDataStream & in, ChannelObjectSerializable & Valeur); |
ChannelObjectSerializable :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
QDataStream & operator<<(QDataStream & out, const ChannelObjectSerializable & Valeur)
{
QString tmp;
out << tmp.fromStdString(Valeur.nom)
<< tmp.fromStdString(Valeur.lastUpdate)
<< tmp.fromStdString(Valeur.description)
<< tmp.fromStdString(Valeur.lien)
<< tmp.fromStdString(Valeur.link);
return out;
}
QDataStream & operator>>(QDataStream & in, ChannelObjectSerializable & Valeur)
{
QString tmp;
in >> tmp;
Valeur.nom = tmp.toStdString();
in >> tmp;
Valeur.lastUpdate = tmp.toStdString();
in >> tmp;
Valeur.description = tmp.toStdString();
in >> tmp;
Valeur.lien = tmp.toStdString();
in >> tmp;
Valeur.link = tmp.toStdString();
return in;
} |
main.cpp
Code:
1 2 3 4 5 6 7 8 9 10
| ChannelObjectSerializable p = ChannelObjectSerializable(newRSS);
QSettings fichier_ecrire("Test.ini", QSettings::IniFormat);
fichier_ecrire.setValue("channel", qVariantFromValue(p));
p.printDonnees();
fichier_ecrire.sync();
ChannelObjectSerializable copie;
QSettings fichier_lire("Test.ini", QSettings::IniFormat);
copie = fichier_lire.value("channel", qVariantFromValue(ChannelObjectSerializable())).value<ChannelObjectSerializable>();
copie.printDonnees(); |