Serialisation of user-defined data in Qt
Article Metadata
Tested with
Devices(s): All (S60)
Compatibility
Platform(s): S60 3rd Edition, FP1
S60 3rd Edition, FP2
S60 5th Edition
S60 3rd Edition, FP2
S60 5th Edition
Article
Keywords: QDataStream
Created: User:Kbwiki
(27 Jan 2010)
Last edited: hamishwillee
(11 Oct 2012)
Overview
This article describes how to provide a serialisation of user-defined custom classes in Qt.
Description
To serialise our own custom Qt classes, we need to write appropriate stream operators:
QDataStream &operator<<(QDataStream &, const MyClass &);
QDataStream &operator>>(QDataStream &, MyClass &);
Solution
Let's assume that MyClass is a user-defined class.
class MyClass
{
public:
int m_int;
QString m_str;
};
Writing into streams - Externalisation:
QDataStream &operator<<(QDataStream &s, const MyClass& myClass)
{
//Extracting from the stream
int i = myClass.m_int;
QString str = myClass.m_str;
s<<i;
s<<str;
return s;
}
Reading from the stream - Internalisation:
QDataStream &operator>>(QDataStream& s, MyClass& myClass)
{
s>>myClass.m_int;
s>>myClass.m_str;
return s;
}
Serialisation - Writing contents of the class into file:
MyClass mClass;
mClass.m_int = 100;
mClass.m_str = "String sting";
QString location = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
location += "/customDataStream.txt";
QFile file;
file.setFileName(location);
bool err = file.open(QIODevice::WriteOnly);
QDataStream out(&file);
out<<mClass;
file.close();
Serialisation - Reading into user-defined class from file:
MyClass mClass;
QString location = QDesktopServices::storageLocation(QDesktopServices::DataLocation);
location += "/customDataStream.txt";
QFile file(location);
bool err = file.open(QIODevice::ReadOnly);
QDataStream in(&file);
in>>mClass;
int i = mClass.m_int;
QString str = mClass.m_str;
file.close();


(no comments yet)