Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: ramzay_77 от Июль 11, 2013, 18:35



Название: Путь к файлу(папке) кириллицей
Отправлено: ramzay_77 от Июль 11, 2013, 18:35
Здравствуйте, уважаемые форумчане!
Второй день бьюсь над удалением файлов и папок, имена которых - в кирице.
Копаю в сторону QTextCodec :

 QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
 //QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
 //QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251") );

 QString string = "Моя папочка";
 qDebug()<<string;
 qDebug()<<tr(string.toAscii());
 qDebug()<<tr(string.toUtf8());
 qDebug()<<tr(string.toLatin1());
 qDebug()<<tr(string.toLocal8Bit());

Но ничто из перечисленного (в т.ч. из закоментированного) не подходит.
Вывод  qDebug() - на рисунке.

А создание папки - без проблем :
QString NewDir = "Новая папка";
DModel->mkdir(currentIndex(),NewDir);

Что делать?


Название: Re: Путь к файлу(папке) кирилицей
Отправлено: merke от Июль 11, 2013, 18:39
Работай только с UTF-8


Название: Re: Путь к файлу(папке) кирилицей
Отправлено: ramzay_77 от Июль 11, 2013, 18:45
Если я Вас правильно понял, то это тоже не работает:

 QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));
 QString string = "Моя папочка";
 qDebug()<<codec->fromUnicode(string.toUtf8());


Название: Re: Путь к файлу(папке) кирилицей
Отправлено: kambala от Июль 11, 2013, 18:54
1) исходники сохранять в UTF-8
2) setCodecForTr() устанавливает кодировку для tr(). тебе же нужно setCodecForCStrings()


Название: Re: Путь к файлу(папке) кирилицей
Отправлено: ramzay_77 от Июль 11, 2013, 19:33
В кусок исходника с применением setCodecForCStrings носом не тыкнете?
Упорно не работает...


Название: Re: Путь к файлу(папке) кирилицей
Отправлено: gil9red от Июль 11, 2013, 19:37
Код:
class UTextCodec
{
public:
    static void initTextCodecs(const char *codecName)
    {
        QTextCodec *codec = QTextCodec::codecForName(codecName);
        QTextCodec::setCodecForCStrings(codec);
        QTextCodec::setCodecForLocale(codec);
        QTextCodec::setCodecForTr(codec);
    }
};

в main.cpp:
Код:
UTextCodec::initTextCodecs("cp1251");


Название: Re: Путь к файлу(папке) кирилицей
Отправлено: Alex Custov от Июль 11, 2013, 20:25
Код
C++ (Qt)
QString str = QString::fromUtf8("Моя папочка");
qDebug("Created: %d", QDir().mkdir(str));
qDebug("Removed: %d", QDir().rmdir(str));
 

Исходники должны быть в UTF-8. И при чём тут вообще setCodecForTr()?


Название: Re: Путь к файлу(папке) кирилицей
Отправлено: ramzay_77 от Июль 11, 2013, 20:32
Спасибо всем откликнувшимся!
Все заработало.

Alex Custov - отдельное спасибо. Благодаря Вам, пазл сложился!


Название: Re: Путь к файлу(папке) кирилицей
Отправлено: ramzay_77 от Июль 13, 2013, 11:12
Все проблемы решились, но появилась маленькя неприятность :
при запуске отладчика в окне вывода приложения qDebug() кириллические строки выводит иероглифами...
Изменение настроек отладчика методом научного тыка положительных результатов не дало.
Можно ли эту неприятность устранить ?


Название: Re: Путь к файлу(папке) кириллицей
Отправлено: kuzulis от Июль 13, 2013, 20:33
Нет. Если не ошибаюсь, то в консольку выводится в CP866.


Название: Re: Путь к файлу(папке) кириллицей
Отправлено: ramzay_77 от Июль 13, 2013, 20:35
Спасибо! Значит - не будем совершенствовать велосипед...


Название: Re: Путь к файлу(папке) кириллицей
Отправлено: ритт от Июль 20, 2013, 05:34
в консоли, из которой запускается приложение (и в которую же сыплет сообщениями): chcp 1251
при этом QTextCodec::setCodecForLocale() звать не надо (в рус-локализованной win cp1251 - дефолтовый кодек)