2

我正在尝试使用 4.7.3 开发一个 Qt 应用程序,其中涉及将 QList 写入苍蝇。

我的课是:

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

对应的QList是:QList任务;

我的文件是:

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

读书:

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

来写:

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

在使用 Qt 4.7.3 和 GCC 4.4 工具链在 Windows 上编译时,我收到以下错误:

c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtCore\qstringlist.h:46:在 c:/QtSDK/Desktop/Qt/4.7.3/mingw/include/QtCore/qstringlist 包含的文件中。小时:46,

c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtCore\qdatastream.h:250:错误:'s >> t'中的'operator>>'不匹配

c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtCore\qdatastream.h:-1: 在函数'QDataStream& operator<<(QDataStream&, const QList&) [with T = Task]'中:

c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtCore\qdatastream.h:263: error: no match for 'operator<<' in 's << ((const QList*)l)-> QList::at with T = Task'

尽管存在 << 和 >> 运算符的重载,但我找不到这些错误的任何原因.....

请帮助任何人,因为这是一个非常重要的应用程序,我必须
提前致谢......

4

1 回答 1

3

您需要定义自己的运营商 out 和 in ... 像这样:

.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;
}
于 2012-01-30T09:34:05.423 回答