Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Smogg от Январь 05, 2013, 08:27



Название: QFile и длинные имена файлов в Виндоуз
Отправлено: Smogg от Январь 05, 2013, 08:27
На WinAPI все понятно: все системные функции работают только и исключительно с Юникодом.

А как заставить QFile читать файлы с мешаниной из русских, арабских, еврейских и пр. символами в пути, да еще и с пробелами?


Название: Re: QFile и длинные имена файлов в Виндоуз
Отправлено: Old от Январь 05, 2013, 08:43
На WinAPI все понятно: все системные функции работают только и исключительно с Юникодом.

А как заставить QFile читать файлы с мешаниной из русских, арабских, еврейских и пр. символами в пути, да еще и с пробелами?
А в чем проблема.
QFile получает имя файла через QString, которая тоже хранит юникод.


Название: Re: QFile и длинные имена файлов в Виндоуз
Отправлено: Smogg от Январь 05, 2013, 10:22
А в чем проблема.
QFile получает имя файла через QString, которая тоже хранит юникод.

Проблема в том, что я не знаю, как засунуть юникод в Qstring.
Код:
 QString file(L"c:/Qt/Мойстиль/حدالأنشطة.qss");

вываливается в :
C:\!Qt_Creator\trftuy\main.cpp:10: error: C2664: 'QString::QString(const QChar *)' : cannot convert parameter 1 from 'const unsigned short [46]' to 'const QChar *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

А если так:
Код:
QString file(QString::fromUtf16(L"c:/Qt/Мойстиль/حدالأنشطة.qss"));

То в дебаге креатора переменная file превращается в:
"c:/Qt/Мойстиль/حدالأنشطة.qss"

UPD: В студии все отображается и открывается корректно. В Креаторе - нет.


Название: Re: QFile и длинные имена файлов в Виндоуз
Отправлено: Old от Январь 05, 2013, 10:27
Почитай про QTextCodec, там подробно все показывается.


Название: Re: QFile и длинные имена файлов в Виндоуз
Отправлено: gil9red от Январь 05, 2013, 17:18
Смотрите tr() - QObject::tr() или QTextCodec::tr(),
а также QTextStream::setCodec(), это уже для работы с QFile при чтении/записи в файл :)