【发布时间】:2017-04-26 08:30:16
【问题描述】:
我有一个 QList 包含一个 OpenCv::Mat 的列表。我想将 QList 写入文件并使用 QDataStream 将文件读入 QList。
这是我的代码的一部分:
// Variables declarations
QList<Mat> myList;
cv::Mat someData;
QString fileName = "list.dat";
QFile file(fileName);
QDataStream out(&file);
QDataStream in(&file);
// Storing some data into the list
myList.append(someData);
myList.append(someData);
myList.append(someData);
// Writing the list to a file
file.open(QIODevice::WriteOnly);
out << myList;
file.close();
// Reading a file to the list
file.open(QIODevice::ReadOnly);
in >> myList;
file.close();
我收到了两个错误:
错误:C2678:二进制“>>”:未找到采用“QDataStream”类型左侧操作数的运算符(或没有可接受的转换)
错误:C2678:二进制“
有什么建议吗?
【问题讨论】:
-
QDataStream & operator>>()对于QList<Mat>没有过载。你必须在一个循环中 push_back (左右)...... -
您必须提供您自己的两个操作员,他们应该有这样的签名:
QDataStream& operator>>(QDataStream&, const QList<Mat>&);和QDataStream& operator<<(QDataStream&, const QList<Mat>&); -
你只需要Mat类型的操作符,Qt知道如何序列化QList。