PDA

View Full Version : Sérialization, QVariant et QSettings : unable*to*load*type 257



archfiend
6th March 2010, 14:48
Hello

I experience issues when running my application

I have personnal object (ChannelObjectSerializable) which I want to save status.

Here is part of the code which will help :

After the sync() :




QVariant::load: unable to load type 257.
QVariant::save: unable to save type 257.
QVariant::load: unable to load type 257.
#####################
# Channel :
# #
# #
# #
# #
# #
#####################



Avec :

ChannelObjectSerilizable.h

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.cpp :

void ChannelObjectSerializable::initChannelSystem()
{
qRegisterMetaTypeStreamOperators("ChannelObject");
qMetaTypeId();
}

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

ChannelObjectSerializable p = ChannelObjectSerializable(newRSS);
p.initChannelSystem();
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())).va lue();
copie.printDonnees();






After loading the object, it's empty

archfiend
7th March 2010, 16:40
Solved, here is the solution :

http://www.siteduzero.com/forum-83-495341-p1-resolu-qt-serialisation-qvariant-et-qsettings.html