Russian Qt Forum

Qt => Общие вопросы => Тема начата: ammaximus от Ноябрь 12, 2010, 00:57



Название: fstream(QString)
Отправлено: ammaximus от Ноябрь 12, 2010, 00:57
Занимаюсь переводом программ с Qt2.3 на Qt 4.5
Столкнулся с тем, что файловый поток больше не принимает QString. С чем связано/как бороться?
Код:
#include <fstream>
...
std::fstream f(QString("settings.ini"));


Название: Re: fstream(QString)
Отправлено: alexman от Ноябрь 12, 2010, 01:25
Зачем std? Если все равно делаешь переход, может стоит полностью на Qt перейти?


Название: Re: fstream(QString)
Отправлено: BlackTass от Ноябрь 12, 2010, 02:30
Я думаю что конкретно в этом случае можно просто заюзать QSettings.
Кстати, почему на 4.5, а не на 4.7?


Название: Re: fstream(QString)
Отправлено: BRE от Ноябрь 12, 2010, 07:18
С чем связано/как бороться?
Связано с тем, что QString хранит строки в UNCODE.

Код
C++ (Qt)
#include <fstream>
...
std::fstream f( QString("settings.ini").toLatin1().constData() );
 


Название: Re: fstream(QString)
Отправлено: tim474 от Ноябрь 12, 2010, 20:30
Цитировать
Связано с тем, что QString хранит строки в UNCODE.
По-моему, немного не так. Конструктор fstream просто не знает про QString, ему надо указатель на массив байтов или std::string. Следовательно, и надо конвертировать Qstring в них.


Название: Re: fstream(QString)
Отправлено: BRE от Ноябрь 12, 2010, 21:22
ему надо указатель на массив байтов
Вот этот сарафан методов после QString(...) как раз и конвертирует QString в массив байт и возвращает указатель на этот массив.