Название: наследование от QIODevice Отправлено: sanaforewer от Март 23, 2012, 12:14 Задача- создать обьект пользовательского класса записать в файл и считать из него
как я прочел в книжке - всего то надо унаследоваться от класса QIODevice и после этого можно записывать в файл с помощью класса QDataStream вот мой класс #ifndef RECEIPT_H #define RECEIPT_H #include <QtGui> class receipt : public QIODevice { public: receipt(int nu=0, QString da="", double su=0); void set_number(const int& i){number=i;} void set_date(const QString& s){date=s;} void set_sum(const double& d){sum=d;} int get_number() const {return number;} QString get_date()const {return date;} double get_sum()const {return sum;} private: int number; QString date; double sum; }; #endif // RECEIPT_H реализация #include "receipt.h" receipt::receipt(int nu, QString da, double su) { number=nu; date=da; sum=su; } до записи дело не дошло так как при компиляции, при создании обьекта моего класса выдает следующую ошибку: D:\Documents and Settings\sana\PRAKTI4ESKAYA_4\untitled\dialog.cpp:18: ошибка: C2259: receipt: Ґў®§¬®¦® ᮧ¤ вм нЄ§Ґ¬Ї«па Ўбва Єв®Ј® Є« бб Ё§-§ б«Ґ¤гойЁе з«Ґ®ў: qint64 QIODevice::readData(char *,qint64): Ўбва Євл© D:\QtSDK\Desktop\Qt\4.8.0\msvc2010\include\QtCore/qiodevice.h(155): б¬. ®Ўкпў«ҐЁҐ "QIODevice::readData" qint64 QIODevice::writeData(const char *,qint64): Ўбва Євл© D:\QtSDK\Desktop\Qt\4.8.0\msvc2010\include\QtCore/qiodevice.h(157): б¬. ®Ўкпў«ҐЁҐ "QIODevice::writeData" что не так? Название: Re: наследование от QIODevice Отправлено: Пантер от Март 23, 2012, 12:28 Это в какой книжке ты такое прочитал???
Название: Re: наследование от QIODevice Отправлено: _OLEGator_ от Март 23, 2012, 12:30 Всего то надо почитать документацию и определить 2 фунции в классе:
Код
UPD Видимо под словом "всего то надо унаследоваться от класса QIODevice" подразумевается, что надо лишь унаследовать класс от QIODevice и вся запись и чтение класса произойдет чудесным образом. Название: Re: наследование от QIODevice Отправлено: sanaforewer от Март 23, 2012, 12:56 спасибо,
попытался переопределить функции << и >> QDataStream &receipt::operator <<(QDataStream & out, const receipt & rec) { //return out << rec.get_number()<<rec.get_date()<<rec.get_sum(); return out<< rec.number<<rec.date<<rec.sum; } QDataStream &receipt::operator >>(QDataStream &in, receipt & rec) { //return in >>rec.set_sum()>>rec.set_date()>>rec.set_sum(); return in>>rec.number>>rec.date>>rec.sum; } компилятор ругается, выдает 2 примерно одинаковые ошибки D:\Documents and Settings\sana\PRAKTI4ESKAYA_4\untitled\..\receipt.cpp:11: ошибка: C2039: <<: Ґ пў«пҐвбп з«Ґ®¬ "receipt" d:\documents and settings\sana\prakti4eskaya_4\receipt.h(7): б¬. ®Ўкпў«ҐЁҐ "receipt" Название: Re: наследование от QIODevice Отправлено: Пантер от Март 23, 2012, 13:14 Удали MinGW\share\locale\ru, чтобы сообщения были на английском.
Название: Re: наследование от QIODevice Отправлено: sanaforewer от Март 23, 2012, 13:25 удалил, не помогло
изменил язык в Qt в настройках полностью на английский, перезапустил Qt- все равно ниче не изменилось добавил архив с проектом Название: Re: наследование от QIODevice Отправлено: Пантер от Март 23, 2012, 13:39 То есть до сих пор ошибки каркозяблами?
Название: Re: наследование от QIODevice Отправлено: sanaforewer от Март 23, 2012, 13:41 да
притом он пишет одни ошибки по русски другие "кракозябрами" но большинство пишет "кракозябрами" Название: Re: наследование от QIODevice Отправлено: _OLEGator_ от Март 23, 2012, 14:15 Да уж, тяжко тебе придется. Пытаешься сделать на авось? Вдруг получится без изучения основ и чтения справки?
Почему здесь стоит friend? Код
Почему не читаешь справку, где написано это Код что требует явного определения этих функций в классах-наследниках. Ты уж определись, хочешь ли ты наследоваться от QIODevice или просто произвести серилизацию класса. Во втором случае тебе надо просто определить Код
вне класса! UPD http://qt-project.org/doc/qt-4.8/qdatastream.html#reading-and-writing-other-qt-classes Название: Re: наследование от QIODevice Отправлено: sanaforewer от Март 23, 2012, 16:13 Большое спасибо, _OLEGator_ , помогло
|