[Interest] Serializing QSensorReading derived classes

Jérôme Godbout godboutj at amotus.ca
Wed Feb 21 15:09:15 CET 2018


The serialization assume you known what type you are reading. If you have a dynamic structure, you will need to add some info about the next data coming (type or something). DataStream convert the object minimal data to byte and no information about what those byte represent. You might have the type intelace inside the datastream or you might do an header that tell the sequence of object (I personnaly would prefer the 2nd choice since you can optimize the sequence with a commun series). Ex:


type bytes series [1,2,354] where those type could be QVariant basic type or user defined type that you could make a switch (could represent a single Type of a series of chained types ex: 354 --> [QString,  int, QVector3D, MyCustomType]. This way you could reduce the type bytes series length and could add the real data validation with data length and checksum if ever needed.


As for QDataStream it can serialize a lot of data type of of the box, but you might need to add some operator to serialize some types. Here's the list of supported data types:

http://doc.qt.io/qt-5/datastreamformat.html


You might need to extend the support to the QAcceleromterReading and QAltimeterReading to do you own data reading and call the constructor with the proper deserialized data.


________________________________
From: Interest <interest-bounces+godboutj=amotus.ca at qt-project.org> on behalf of Jason H <jhihn at gmx.com>
Sent: Wednesday, February 21, 2018 1:05:35 AM
To: interestqt-project.org
Subject: [Interest] Serializing QSensorReading derived classes

I'd like to serialize these values.
QAcceleromterReading has x,y,z properties, but to serialize this one, the accelerometer mode should also be included.

But aside from that, I'm not clear on what I need to do. There's adding the QDataStream << >> (QDataScream stream, QSensorReading reading) operators. But that won't allow me to know what I'm reading, so I need to add a byte to know what I'm deserializing, which means I should really do it via QVariant in the QMetaType system.
qRegisterMetaType() and DECLARE_META_TYPE(). However, when I do this I get:
qmetatype.h:766: error: call to implicitly-deleted copy constructor of 'QAltimeterReading'
            return new (where) T(*static_cast<const T*>(t));
                               ^ ~~~~~~~~~~~~~~~~~~~~~~~~~
for each of the types.

What can I do to get this to work without having to write (derive) my own classes?

I'm also wondering why this isn't supported already?
_______________________________________________
Interest mailing list
Interest at qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20180221/a8e9963f/attachment.html>


More information about the Interest mailing list