У меня есть класс с именем myClass. Он имеет оператор перегрузки << и >>. Я могу использовать его с объектами cin и cout. Теперь я хочу записать объект этого класса в файл в Qt. Как я могу получить его буфер для воспроизведения. Преобразуйте в QTextStream, QDataStream, что возможно или предложите мне какое-либо решение. Спасибо, как
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
.
Надеюсь это поможет.
Это явно неправильно понять из какого istream
и Q*Stream
представляют. Думайте о них как о трубах или трубах. Они не хранят данные, они просто позволяют перемещать данные из одного места (объект класса) в другое место (файл или некоторые из них).
Другими словами, данные не хранятся в самом потоке, так что даже если вы могли бы преобразовать istream
к QDataStream
, это не поможет вам в любом случае для извлечения myClass
объект, который высыпали через поток.
Как было предложено в комментарии, можно сделать что-то вроде этого:
stringstream ss;
QDataStream ds;
myclass a;
... do other stuff with a, such as give it some content...
ss << a;
string s = ss.str();
ds << s;
(Могут быть другие шаги, необходимые для преобразования std :: string в объект, подходящий для хранения в QDataStream, но суть в том, что вы используете объект типа std :: istream, чтобы получить данные из класса в строку, а затем вывести строку в ваш QDataStream)