Hello,
I'm trying write to binary file my custom type, so I have:
typedef enum t_timeloopsStatus
{
NOTHING = 0,
UPDATED,
} t_timeloopsStatus;
typedef struct t_timeloops
{
t_timeloopsStatus status;
} t_timeloops;
QMap<QString, t_timeloops> _timeLoops;
typedef enum t_timeloopsStatus
{
NOTHING = 0,
UPDATED,
} t_timeloopsStatus;
typedef struct t_timeloops
{
QString key;
t_timeloopsStatus status;
} t_timeloops;
QMap<QString, t_timeloops> _timeLoops;
To copy to clipboard, switch view to plain text mode
I know, that I have to overload << and >> operators
QDataStream &operator<<(QDataStream &out, const QMap<QString, t_timeloops> &timeloops);
QDataStream &operator>>(QDataStream &in, QMap<QString, t_timeloops> &timeloops);
To copy to clipboard, switch view to plain text mode
but I have no idea how will looks function for that.
I found an original function for QMap and tried to rewrite it, but without success.
{
out << quint32(timeloops.size());
typename QMap<QString, t_timeloops>::ConstIterator it = timeloops.end();
typename QMap<QString, t_timeloops>::ConstIterator begin = timeloops.begin();
while (it != begin) {
--it;
out << it.key() << it.value();
}
return out;
}
{
in.resetStatus();
timeloops.clear();
quint32 n;
in >> n;
timeloops.detach();
for (quint32 i = 0; i < n; ++i) {
break;
t_timeloops value;
in >> key >> value.key >> value.pad >> value.cylinder >> value.status;
timeloops.insertMulti(key, value);
}
timeloops.clear();
in.setStatus(oldStatus);
return in;
}
QDataStream &operator<<(QDataStream &out, const QMap<QString, t_timeloops> &timeloops)
{
out << quint32(timeloops.size());
typename QMap<QString, t_timeloops>::ConstIterator it = timeloops.end();
typename QMap<QString, t_timeloops>::ConstIterator begin = timeloops.begin();
while (it != begin) {
--it;
out << it.key() << it.value();
}
return out;
}
QDataStream &operator>>(QDataStream &in, QMap<QString, t_timeloops> &timeloops)
{
QDataStream::Status oldStatus = in.status();
in.resetStatus();
timeloops.clear();
quint32 n;
in >> n;
timeloops.detach();
for (quint32 i = 0; i < n; ++i) {
if (in.status() != QDataStream::Ok)
break;
QString key;
t_timeloops value;
in >> key >> value.key >> value.pad >> value.cylinder >> value.status;
timeloops.insertMulti(key, value);
}
if (in.status() != QDataStream::Ok)
timeloops.clear();
if (oldStatus != QDataStream::Ok)
in.setStatus(oldStatus);
return in;
}
To copy to clipboard, switch view to plain text mode
Thanks for any help!
Bookmarks