как получить ostream, если у меня оператор << и >> уже перегружен

0

У меня есть класс с именем myClass. Он имеет оператор перегрузки << и >>. Я могу использовать его с объектами cin и cout. Теперь я хочу записать объект этого класса в файл в Qt. Как я могу получить его буфер для воспроизведения. Преобразуйте в QTextStream, QDataStream, что возможно или предложите мне какое-либо решение. Спасибо, как

  • 0
    Это дубликат stackoverflow.com/questions/20331120/stdostream-to-qdatastream ?
  • 0
    У вас есть решение?
Показать ещё 10 комментариев
Теги:
qt
iostream

2 ответа

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

Это явно неправильно понять из какого 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)

  • 0
    Я знаю, как конвертировать из строки. проблема в том, как я могу получить строку из << myClass
  • 0
    Как я уже сказал, используйте stringstream!
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню