Hi,
I'm trying to override the QDataStream to insert a class into a stream eventually writing it to a file. The >> works however << seems to be broken.
Kindly check and let me know what i'm missing
main
int main(int argc, char *argv[])
{
WorkClass *w = new WorkClass;
w->setId(1);
w->setWorkname("Hello");
WorkItemClass *wc1 = new WorkItemClass;
wc1->setId(11);
wc1->setData("11");
WorkItemClass *wc2 = new WorkItemClass;
wc2->setId(22);
wc2->setData("22");
w->appendItem(wc1);
w->appendItem(wc2);
{
stream.setDevice(&file);
stream << w;
file.close();
}
WorkClass w2;
{
stream>>w2;
file.close();
}
return a.exec();
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
WorkClass *w = new WorkClass;
w->setId(1);
w->setWorkname("Hello");
WorkItemClass *wc1 = new WorkItemClass;
wc1->setId(11);
wc1->setData("11");
WorkItemClass *wc2 = new WorkItemClass;
wc2->setId(22);
wc2->setData("22");
w->appendItem(wc1);
w->appendItem(wc2);
QFile file("test.txt");
if(file.open(QIODevice::WriteOnly ))
{
QDataStream stream;
stream.setDevice(&file);
stream << w;
file.close();
}
WorkClass w2;
if(file.open(QIODevice::ReadOnly))
{
QDataStream stream( &file );
stream>>w2;
file.close();
}
return a.exec();
}
To copy to clipboard, switch view to plain text mode
workclass.h
class WorkClass;
class WorkItemClass;
{
Q_OBJECT
public:
explicit WorkClass
(QObject *parent
= nullptr
);
void setWorkname
(const QString &value
);
QList<WorkItemClass*> getItemList() const;
void appendItem( WorkItemClass *value);
signals:
public slots:
protected:
QList<WorkItemClass*> itemList;
};
class WorkItemClass
: public QObject{
Q_OBJECT
public:
explicit WorkItemClass
(QObject *parent
= nullptr
);
int getId() const;
void setId(int value);
void setData
(const QString &value
);
private:
int id;
};
class WorkClass;
class WorkItemClass;
class WorkClass : public QObject
{
Q_OBJECT
public:
explicit WorkClass(QObject *parent = nullptr);
QVariant getId() const;
void setId(const QVariant &value);
QString getWorkname() const;
void setWorkname(const QString &value);
QList<WorkItemClass*> getItemList() const;
void appendItem( WorkItemClass *value);
signals:
public slots:
protected:
QVariant id;
QString workname;
QList<WorkItemClass*> itemList;
};
QDataStream &operator>>(QDataStream &stream, WorkClass &work);
QDataStream &operator<<(QDataStream &stream,const WorkClass &work);
class WorkItemClass : public QObject
{
Q_OBJECT
public:
explicit WorkItemClass(QObject *parent = nullptr);
int getId() const;
void setId(int value);
QString getData() const;
void setData(const QString &value);
private:
int id;
QString data;
};
To copy to clipboard, switch view to plain text mode
workclass.cpp
{
int count;
int id;
stream >> variant;
work.setId(variant);
stream >> string;
work.setWorkname(string);
stream >> count;
for (int i=0; i <count; i++) {
stream >> id;
stream >> string;
WorkItemClass *w = new WorkItemClass;
w->setId(id);
w->setData(string);
work.appendItem(w);
}
return stream;
}
QDataStream &operator<<
(QDataStream
& stream,
const WorkClass
&work
) {
stream << work.getId();
stream << work.getWorkname();
stream << work.getItemList().size();
for(int i =0;i<work.getItemList().count();i++)
{
stream << work.getItemList().at(i)->getId();
stream << work.getItemList().at(i)->getData();
}
return stream;
}
{
}
{
return id;
}
void WorkClass
::setId(const QVariant &value
) {
id = value;
}
QString WorkClass
::getWorkname() const {
return workname;
}
void WorkClass
::setWorkname(const QString &value
) {
workname = value;
}
QList<WorkItemClass*> WorkClass::getItemList() const
{
return itemList;
}
void WorkClass::appendItem(WorkItemClass *value)
{
itemList.append(value);
}
{
}
int WorkItemClass::getId() const
{
return id;
}
void WorkItemClass::setId(int value)
{
id = value;
}
QString WorkItemClass
::getData() const {
return data;
}
void WorkItemClass
::setData(const QString &value
) {
data = value;
}
QDataStream &operator>>(QDataStream &stream, WorkClass &work)
{
QVariant variant;
QString string;
int count;
int id;
stream >> variant;
work.setId(variant);
stream >> string;
work.setWorkname(string);
stream >> count;
for (int i=0; i <count; i++) {
stream >> id;
stream >> string;
WorkItemClass *w = new WorkItemClass;
w->setId(id);
w->setData(string);
work.appendItem(w);
}
return stream;
}
QDataStream &operator<<(QDataStream& stream, const WorkClass &work)
{
stream << work.getId();
stream << work.getWorkname();
stream << work.getItemList().size();
for(int i =0;i<work.getItemList().count();i++)
{
stream << work.getItemList().at(i)->getId();
stream << work.getItemList().at(i)->getData();
}
return stream;
}
WorkClass::WorkClass(QObject *parent) : QObject(parent)
{
}
QVariant WorkClass::getId() const
{
return id;
}
void WorkClass::setId(const QVariant &value)
{
id = value;
}
QString WorkClass::getWorkname() const
{
return workname;
}
void WorkClass::setWorkname(const QString &value)
{
workname = value;
}
QList<WorkItemClass*> WorkClass::getItemList() const
{
return itemList;
}
void WorkClass::appendItem(WorkItemClass *value)
{
itemList.append(value);
}
WorkItemClass::WorkItemClass(QObject *parent) : QObject (parent)
{
}
int WorkItemClass::getId() const
{
return id;
}
void WorkItemClass::setId(int value)
{
id = value;
}
QString WorkItemClass::getData() const
{
return data;
}
void WorkItemClass::setData(const QString &value)
{
data = value;
}
To copy to clipboard, switch view to plain text mode
Bookmarks