我有一个名为myClass的类。它具有重载运算符<<和>>。我可以将它与cin和cout对象一起使用。现在我想将此类的对象写入Qt中的文件。我怎样才能使用它的缓冲区。尽可能转换为QTextStream,QDataStream或建议任何解决方案。 谢谢 像
答案 0 :(得分:3)
1)您需要将“类数据”转换为具有<<
重载的临时字符串流。
2)您需要从已构造和设置的字符串流对象中查询字符串对象。
3)您需要从字符串对象中获取QString
(或QByteArray
)。
4)您可以为QString
或QTextStream
类设置该特定QDataStream
。
以下是以适当的Qt方式为您进行转换的代码:
std::stringstream myStringStream;
myStringStream << MyClassObject;
QTextStream textStream(QString::fromStdString(myStringStream.str()));
或
std::stringstream myStringStream;
myStringStream << MyClassObject;
QDataStream dataStream(QString::fromStdString(myStringStream.str()));
您还可以使用setString
方法而不是构造函数来正确设置QDataStream
和/或QTextStream
。
希望这有帮助。
答案 1 :(得分:1)
这显然是对istream
和Q*Stream
所代表的内容的误解。将它们视为管道或管道。它们不保持数据,它们只允许将数据从一个地方(类对象)移动到另一个地方(文件或某些文件)。
换句话说,数据不存储在流本身中,因此即使您可以将istream
转换为QDataStream
,也无法以任何方式检索{ {1}}通过流流出的对象。
正如评论中所建议的,人们可以这样做:
myClass
(将std :: string转换为适合存储在QDataStream中的对象可能需要其他步骤,但这里的本质是使用std :: istream类型对象从类中获取数据转换为字符串,然后将字符串输出到QDataStream)