如果我有<<<<<<<<和>>运算符已经重载了

时间:2013-12-26 08:30:58

标签: c++ qt iostream

我有一个名为myClass的类。它具有重载运算符<<和>>。我可以将它与cin和cout对象一起使用。现在我想将此类的对象写入Qt中的文件。我怎样才能使用它的缓冲区。尽可能转换为QTextStream,QDataStream或建议任何解决方案。 谢谢 像

2 个答案:

答案 0 :(得分:3)

1)您需要将“类数据”转换为具有<<重载的临时字符串流。

2)您需要从已构造和设置的字符串流对象中查询字符串对象。

3)您需要从字符串对象中获取QString(或QByteArray)。

4)您可以为QStringQTextStream类设置该特定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)

这显然是对istreamQ*Stream所代表的内容的误解。将它们视为管道或管道。它们不保持数据,它们只允许将数据从一个地方(类对象)移动到另一个地方(文件或某些文件)。

换句话说,数据不存储在流本身中,因此即使您可以将istream转换为QDataStream,也无法以任何方式检索{ {1}}通过流流出的对象。

正如评论中所建议的,人们可以这样做:

myClass

(将std :: string转换为适合存储在QDataStream中的对象可能需要其他步骤,但这里的本质是使用std :: istream类型对象从类中获取数据转换为字符串,然后将字符串输出到QDataStream)