LINUX.ORG.RU

Кодировка в QtCreator

 , , ,


0

1

Всем привет!
Уже не первый раз встречаюсь с такой проблемой: В KDE при создании в QtCreator приложения с GUI не работает UTF-8 из коробки. Выглядит это так. Если же добавить строчку

QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
а каждую строку окружать чем-то подобным: QObject::tr(str.c_str()), то всё отображается нормально. Причём на других DE эти строчки не нужны, кириллица отображается корректно из коробки!
И, несмотря на то, что ошибку о git он выдал по-русски нормально (видно на снимках), в qDebug() он всё равно выводит кракозябры.

Кто-нибудь встречался с таким? Как можно вылечить? И из-за чего вообще так происходит? Заранее спасибо!

Deleted

Последнее исправление: cetjs2 (всего исправлений: 4)
Ответ на: комментарий от anonymous

Разумеется.

[~]>locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=

Deleted
()

а вывод такого приложения:

#include <QCoreApplication>

#include <QDebug>
#include <QTextCodec>
#include <QProcessEnvironment>

void dump(QTextCodec *textcodec)
{
    qDebug()<<textcodec;
    if(textcodec==0) return;
    qDebug()<<textcodec->name();
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    dump(QTextCodec::codecForCStrings());
    dump(QTextCodec::codecForLocale());
    dump(QTextCodec::codecForTr());

    QProcessEnvironment pe = QProcessEnvironment::systemEnvironment();
    foreach(QString key, pe.keys())
        if((key.left(3)=="LC_")||(key=="SHELL")||(key.contains("LANG")))
            qDebug()<<key<<pe.value(key);

    return a.exec();
}

anonymous
()
Ответ на: комментарий от Deleted

у меня примерно так:

0x0 
0x234ea60 
"System" 
0x0 
"LANGUAGE" "ru:en_US:en" 
"LC_MEASUREMENT" "ru_RU.UTF-8" 
"LC_NUMERIC" "ru_RU.UTF-8" 
"LANG" "ru_RU.UTF-8" 
"LC_MONETARY" "ru_RU.UTF-8" 
"LC_TIME" "ru_RU.UTF-8" 
"LC_IDENTIFICATION" "ru_RU.UTF-8" 
"LC_TELEPHONE" "ru_RU.UTF-8" 
"LC_ADDRESS" "ru_RU.UTF-8" 
"LC_PAPER" "ru_RU.UTF-8" 
"LC_NAME" "ru_RU.UTF-8" 
"SHELL" "/bin/bash" 
можно попробовать в проект добавить «Проекты» -> «Сборка и запуск» -> «Запуск» -> «Среда выполнения» -> «Подробней»

anonymous
()
Ответ на: комментарий от anonymous

Так пробовал. Были кракозябры.

Deleted
()
Ответ на: комментарий от anonymous

Теперь и у меня такой вывод. Но это же только для одного проекта. В каждый, что ли, эти параметры забивать?

Хотя, появились догадки. Если у Вас всё хорошо, то, быть может, дело в настройках КДЕ в хомяке? У Вас КДЕ?

Deleted
()

а у меня оказывается в Qt4 тоже беда с кодировкой, а в Qt5 все нормально.

anonymous
()
Ответ на: комментарий от Deleted

Нет, проблема не в хомяке. В новом юзере тоже кракозябры.

Deleted
()
Ответ на: комментарий от anonymous

В XFCE и у меня проблем не было.

Deleted
()
Ответ на: комментарий от anonymous
[build-test-Desktop-Debug]>./test 
0x0 
0xfb9100 
"System" 
0x0 
"LANGUAGE" "" 
"LANG" "ru_RU.UTF-8" 
"SHELL" "/bin/bash" 

На этом виснет, приходится убивать. В остальных - те же кракозябры.

Deleted
()

а попробуй с исходное приложение:

    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));

anonymous
()
Ответ на: комментарий от anonymous

А вот с этим заработало! Спасибо за подсказку.

Только, опять же, почему в DE, отличных от KDE, всё работает без этого костыля?

Deleted
()
Ответ на: комментарий от anonymous

При проверке с разными DE - да, одинаковые.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.