Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从QDataStream中读取相同类型的多个序列化对象?_C++_Qt - Fatal编程技术网

C++ 如何从QDataStream中读取相同类型的多个序列化对象?

C++ 如何从QDataStream中读取相同类型的多个序列化对象?,c++,qt,C++,Qt,我目前正试图在代码中实现一个序列化系统,它在一个文件中存储同一类型的多个对象。这非常有效,我通常只是使用OpenModeQIODevice::append逐个追加它们。这里没问题 然而,另一方面,当我阅读这些对象时,我遇到了麻烦 这就是它现在的样子: file.open(QIODevice::ReadOnly); QDataStream out(&file); MyObject entry; out >> entry; entries.push_back(entry); 它

我目前正试图在代码中实现一个序列化系统,它在一个文件中存储同一类型的多个对象。这非常有效,我通常只是使用OpenMode
QIODevice::append
逐个追加它们。这里没问题

然而,另一方面,当我阅读这些对象时,我遇到了麻烦

这就是它现在的样子:

file.open(QIODevice::ReadOnly);
QDataStream out(&file);
MyObject entry;
out >> entry;
entries.push_back(entry);
它按预期工作,但只读取一个元素。但是,我希望读取文件中的所有对象,而不仅仅是第一个出现的对象


这怎么可能呢?我很不确定我的流是否有可能知道我的对象以序列化形式在文件中的大小,但必须有某种方法?

只需在整个流上迭代:

while( out.atEnd() == false ) {
  MyObject entry;
  out >> entry;
  entries.push_back(entry);  
}

有什么问题吗?你就不能迭代吗?@Ilya我希望如此,但我不太明白如何迭代它。我无法让它与foreach或迭代器循环一起工作。非常有用,谢谢!我认为流将一次读取整个文件,并将其视为一个完整的字符串/对象。