Не могу записать Qlist в файл, используя QDataStream - PullRequest
2 голосов
/ 14 января 2012

Я пытаюсь разработать приложение Qt с использованием 4.7.3, которое включает в себя запись QList во флай.

Мой класс:

class Task  
{  
public:  
    QString ta, desc;  
    QTime ti;  
    QDate da; 
    int pri, diff;  
    bool ala;  
};  

соответствующий QList: QList tasks;

Мой файл:

QFile theFile("dataBase");  
QDataStream stream(&theFile);  
stream.setVersion(QDataStream::Qt_4_7);

читать:

theFile.open(QIODevice::ReadOnly);  
stream >> tasks;

написать:

theFile.open(QIODevice::WriteOnly);  
stream << tasks;  

при компиляции в Windows с использованием цепочки инструментов Qt 4.7.3 и GCC 4.4 я получаю следующую ошибку:

c: \ QtSDK \ Desktop \ Qt \ 4.7.3 \ mingw \ include \ QtCore \ qstringlist.h: 46: в файл включен из c: /QtSDK/Desktop/Qt/4.7.3/mingw/include/QtCore /qstringlist.h:46,

c: \ QtSDK \ Desktop \ Qt \ 4.7.3 \ mingw \ include \ QtCore \ qdatastream.h: 250: ошибка: нет совпадения для 'operator >>' в 's >> t'

c: \ QtSDK \ Desktop \ Qt \ 4.7.3 \ mingw \ include \ QtCore \ qdatastream.h: -1: в функции 'QDataStream & operator << (QDataStream &, const QList &) [with T = Task]': </p>

c: \ QtSDK \ Desktop \ Qt \ 4.7.3 \ mingw \ include \ QtCore \ qdatastream.h: 263: ошибка: нет совпадения для 'operator <<' в 's << ((const QList *) l ) -> QList :: at с T = Task '

Хотя перегрузка для операторов << и >> существует, я не могу найти причину этих ошибок .....

Пожалуйста, помогите всем, так как это очень важное приложение, которое я должен сделать
Заранее спасибо ....

1 Ответ

3 голосов
/ 30 января 2012

Вам нужно определить свой собственный оператор вне и внутри ... Примерно так:

.h файл:

class myClass{
public:
    QString name;
    QString gender;
    QDate birthDay;
    QString job;
    QString address;
    int phoneNo;
};

QDataStream &operator <<(QDataStream &stream, const myClass &myclass);
QDataStream &operator >>(QDataStream &stream, myClass &myclass);

.cpp файл:

QDataStream &operator <<(QDataStream &stream, const myClass &myclass)
{
    stream<<myclass.address;
    stream<<myclass.birthDay;
    stream<<myclass.gender;
    stream<<myclass.job;
    stream<<myclass.name;
    stream<<myclass.phoneNo;
    return stream;
}

QDataStream &operator >>(QDataStream &stream, myClass &myclass)
{
    stream>>myclass.address;
    stream>>myclass.birthDay;
    stream>>myclass.gender;
    stream>>myclass.job;
    stream>>myclass.name;
    stream>>myclass.phoneNo;
    return stream;
}
...