【问题标题】:Can't write a Qlist to a file using QDataStream无法使用 QDataStream 将 Qlist 写入文件
【发布时间】:2012-01-14 16:13:48
【问题描述】:

我正在尝试使用 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;  

在 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: 错误:'s >> t'中的'operator>>'不匹配

c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtCore\qdatastream.h:-1: 在函数'QDataStream& operator

c:\QtSDK\Desktop\Qt\4.7.3\mingw\include\QtCore\qdatastream.h:263: 错误:'operatorQList::at with T = Task'

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

请帮助任何人,因为这是我必须制作的非常重要的应用程序
在此先感谢....

【问题讨论】:

  • 请显示运算符重载,并确保从您使用它的地方可以看到定义(您是否在Task.h 文件中定义了它?)
  • 定义已经存在于我包含的 qdatastream.h 头文件中。它们还不够吗?
  • 看起来你没有为流操作符(>)提供重载,你不能指望c++神奇地知道如何序列化你的类。
  • 就是这样做的,你猜怎么着?它神奇地起作用了!谢谢克里斯和图腾!

标签: qt operator-overloading qlist


【解决方案1】:

您需要定义自己的运营商 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 2015-10-27
    • 1970-01-01
    • 2019-05-26
    • 2014-03-13
    • 1970-01-01
    相关资源
    最近更新 更多