There is a function for loading data from a file using QDataStream:
void tgTableModel::Load(QString &path) { QFile file(path); if(file.open(QIODevice::ReadOnly)) { m_ptargetList->clear(); QList<target> list; //target моя структура QDataStream in(&file); in.setVersion(QDataStream::Qt_5_7); in >> list; m_ptargetList = &list; file.close(); } }
In order for this to work, I defined functions for the target structure:
struct target{ QString name; QString description; int priority; QDate deadline; Status::Value ready; }; QDataStream &operator << (QDataStream &stream, const target &tg) { stream << tg.name; stream << tg.description; stream << tg.priority; stream << tg.deadline; stream << tg.ready; return stream; } QDataStream &operator >> (QDataStream &stream, target &tg) { stream >> tg.name; stream >> tg.description; stream >> tg.priority; stream >> tg.deadline; stream >> tg.ready; return stream; }
And also defined the functions for stream >> tg.ready; and stream << tg.ready;
class Status: public QObject { Q_OBJECT public: explicit Status(QObject * parent = nullptr): QObject(parent){} enum /*class*/ Value{in_waiting, deferred, completed, in_process, nVariant}; Q_ENUM(Value) friend QDataStream &operator << (QDataStream &stream, const Status::Value &val) { stream << (int)val; return stream; } friend QDataStream &operator >> (QDataStream &stream, Status::Value &val) { stream >> (int)val; // вот тут выбивает 4 ошибки!!! return stream; } };
But in the specified place, it beats 4 identical errors that I would not do: "... error: C2679: binary '>>': no operator found the type of 'int' (or there is no acceptable conversion) "
Help fix, pls. Thank you in advance!
int i; stream >> i; val = i;
int i; stream >> i; val = i;
? - yrHeTaTeJlbfriend QDataStream &operator >> (QDataStream &stream, Status::Value &val) { quint32 num; stream >> num; val = static_cast<Status::Value>(num); return stream; }
friend QDataStream &operator >> (QDataStream &stream, Status::Value &val) { quint32 num; stream >> num; val = static_cast<Status::Value>(num); return stream; }
In total, 17 errors: "mainwindow.obj: -1: error: LNK2005:" class QDataStream & __cdecl operator >> (class QDataStream &, struct target &) "(?? 5 @ YAAEAVQDataStream @@ AEAV0 @ AEAUtarget @@@ Z) already defined in main.obj " - Andrey