Russian Qt Forum
Ноябрь 24, 2024, 15:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: наследование от QIODevice  (Прочитано 5507 раз)
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"

что не так?
« Последнее редактирование: Март 23, 2012, 16:14 от sanaforewer » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Март 23, 2012, 12:28 »

Это в какой книжке ты такое прочитал???
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
_OLEGator_
Гость
« Ответ #2 : Март 23, 2012, 12:30 »

Всего то надо почитать документацию и определить 2 фунции в классе:
Код
C++ (Qt)
QDataStream &operator<<(QDataStream &, const ClassName &);
QDataStream &operator>>(QDataStream &, ClassName &);

UPD
Видимо под словом "всего то надо унаследоваться от класса QIODevice" подразумевается, что надо лишь унаследовать класс от QIODevice и вся запись и чтение класса произойдет чудесным образом.
« Последнее редактирование: Март 23, 2012, 12:32 от _OLEGator_ » Записан
sanaforewer
Гость
« Ответ #3 : Март 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"
« Последнее редактирование: Март 23, 2012, 13:09 от sanaforewer » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Март 23, 2012, 13:14 »

Удали MinGW\share\locale\ru, чтобы сообщения были на английском.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
sanaforewer
Гость
« Ответ #5 : Март 23, 2012, 13:25 »

удалил, не помогло
изменил язык в Qt в настройках полностью на английский, перезапустил Qt- все равно ниче не изменилось
добавил архив с проектом
« Последнее редактирование: Март 23, 2012, 13:40 от sanaforewer » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Март 23, 2012, 13:39 »

То есть до сих пор ошибки каркозяблами?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
sanaforewer
Гость
« Ответ #7 : Март 23, 2012, 13:41 »

да
притом он пишет одни ошибки по русски другие "кракозябрами"
но большинство пишет "кракозябрами"
Записан
_OLEGator_
Гость
« Ответ #8 : Март 23, 2012, 14:15 »

Да уж, тяжко тебе придется. Пытаешься сделать на авось? Вдруг получится без изучения основ и чтения справки?

Почему здесь стоит friend?
Код
C++ (Qt)
   friend QDataStream &operator<<(QDataStream &, const receipt &);
   friend QDataStream &operator>>(QDataStream &, receipt &);

Почему не читаешь справку, где написано это
Код
C++ (Qt)
virtual qint64 QIODevice::readData ( char * data, qint64 maxSize ) = 0
virtual qint64 QIODevice::writeData ( const char * data, qint64 maxSize ) = 0
что требует явного определения этих функций в классах-наследниках.

Ты уж определись, хочешь ли ты наследоваться от QIODevice или просто произвести серилизацию класса.
Во втором случае тебе надо просто определить
Код
C++ (Qt)
QDataStream &operator<<(QDataStream &, const ClassName &);
QDataStream &operator>>(QDataStream &, ClassName &)

вне класса!

UPD
http://qt-project.org/doc/qt-4.8/qdatastream.html#reading-and-writing-other-qt-classes
« Последнее редактирование: Март 23, 2012, 14:17 от _OLEGator_ » Записан
sanaforewer
Гость
« Ответ #9 : Март 23, 2012, 16:13 »

Большое спасибо, _OLEGator_ , помогло
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.245 секунд. Запросов: 23.