【问题标题】:How to write and read a QList<Mat> with QDataStream to and from a file?如何使用 QDataStream 在文件中写入和读取 QList<Mat>?
【发布时间】: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 &amp; operator&gt;&gt;() 对于QList&lt;Mat&gt; 没有过载。你必须在一个循环中 push_back (左右)......
  • 您必须提供您自己的两个操作员,他们应该有这样的签名:QDataStream&amp; operator&gt;&gt;(QDataStream&amp;, const QList&lt;Mat&gt;&amp;);QDataStream&amp; operator&lt;&lt;(QDataStream&amp;, const QList&lt;Mat&gt;&amp;);
  • 你只需要Mat类型的操作符,Qt知道如何序列化QList。

标签: c++ qt opencv


【解决方案1】:

您需要为您的自定义类型 Mat 提供这两个运算符:

QDataStream & operator<<(QDataStream &out, const Mat& mat)
QDataStream & operator>>(QDataStream &in, Mat& mat)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-10-27
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2015-04-10
  • 2012-09-15
  • 2015-07-26
  • 2011-08-07
相关资源
最近更新 更多