Russian Qt Forum
Май 24, 2024, 20:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблемы с киррилицей в Linux на ARM (Qt Embedded)  (Прочитано 3684 раз)
fzt
Гость
« : Ноябрь 10, 2011, 15:34 »

Здравствуйте. Уже неделю гадаю на кофейной гуще, печатаю и курю маны. Приходили волхвы, сказали спросить на форуме.

Исходники пишутся в MsVS2008 Qt 4.6.0 Windows7 (CP1251)
Копируются на Linux машину, где компилируются qt-embedded-linux-opensource-src-4.5.3
Оттуда бинарник по FTP едет на машину с ARM процессором.
Так, это важно, на Linux ARM из гуя - фреймбуффер онли. Шрифт один - Helvetica.
Не отображается русский язык зашитый в сорцах.

Чего пробовал:
Читая доки обнаружил около 52 кодеков, которые тупо перебирал по нажатию F1, в надежде что нужная кодека отобразит русский.
пробовал менять кодировку исходников:
1)строки русские в Cp1251
2)строки русские в UTF8
3)строки русские в KOI8-R (aka IBM866 для Qt - верно?)

И ещё горку гаданий на кофейно гуще.
Кодеку менял так:
Код:
void W::TextCodecSwitchSlot()
{
codec_name = new QString("KOI8-R");
if (codec_index == 2) { codec_name = new QString("KOI8-R");}
if (codec_index == 1) { codec_name = new QString("KOI8-U");}
if (codec_index == 20) { codec_name = new QString("WINSAMI2");}
if (codec_index == 0) { codec_name = new QString("IBM 866");}
if (codec_index == 3) { codec_name = new QString("Windows-1250");}
if (codec_index == 4) { codec_name = new QString("Windows-1251");}
if (codec_index == 5) { codec_name = new QString("Windows-1252");}
if (codec_index == 6) { codec_name = new QString("Windows-1253");}
if (codec_index == 7) { codec_name = new QString("Windows-1254");}
if (codec_index == 8) { codec_name = new QString("Windows-1255");}
if (codec_index == 9) { codec_name = new QString("Windows-1256");}
if (codec_index == 10) { codec_name = new QString("Windows-1257");}
if (codec_index == 11) { codec_name = new QString("Windows-1258");}
if (codec_index == 12) { codec_name = new QString("Apple Roman");}
if (codec_index == 13) { codec_name = new QString("Big5");}
if (codec_index == 14) { codec_name = new QString("Big5-HKSCS");}
if (codec_index == 15) { codec_name = new QString("CP949");}
if (codec_index == 16) { codec_name = new QString("EUC-JP");}
if (codec_index == 17) { codec_name = new QString("EUC-KR");}
if (codec_index == 18) { codec_name = new QString("GB18030-0");}
if (codec_index == 19) { codec_name = new QString("IBM 850");}

if (codec_index == 21) { codec_name = new QString("IBM 874");}
if (codec_index == 22) { codec_name = new QString("ISO 2022-JP");}
if (codec_index == 23) { codec_name = new QString("ISO 8859-1");}
if (codec_index == 24) { codec_name = new QString("ISO 8859-2");}
if (codec_index == 25) { codec_name = new QString("ISO 8859-3");}
if (codec_index == 26) { codec_name = new QString("ISO 8859-4");}
if (codec_index == 27) { codec_name = new QString("ISO 8859-5");}
if (codec_index == 28) { codec_name = new QString("ISO 8859-6");}
if (codec_index == 29) { codec_name = new QString("ISO 8859-7");}
if (codec_index == 30) { codec_name = new QString("ISO 8859-8");}
if (codec_index == 31) { codec_name = new QString("ISO 8859-9");}
if (codec_index == 32) { codec_name = new QString("ISO 8859-10");}
if (codec_index == 33) { codec_name = new QString("ISO 8859-13");}
if (codec_index == 34) { codec_name = new QString("ISO 8859-14");}
if (codec_index == 35) { codec_name = new QString("ISO 8859-15");}
if (codec_index == 36) { codec_name = new QString("ISO 8859-16");}
if (codec_index == 37) { codec_name = new QString("Iscii-Bng");}
if (codec_index == 38) { codec_name = new QString("Dev");}
if (codec_index == 39) { codec_name = new QString("Gjr");}
if (codec_index == 40) { codec_name = new QString("Knd");}
if (codec_index == 41) { codec_name = new QString("Mlm");}
if (codec_index == 42) { codec_name = new QString("Ori");}
if (codec_index == 43) { codec_name = new QString("Pnj");}
if (codec_index == 44) { codec_name = new QString("Tlg");}
if (codec_index == 45) { codec_name = new QString("Tml");}
if (codec_index == 46) { codec_name = new QString("JIS X 0201");}
if (codec_index == 47) { codec_name = new QString("JIS X 0208");}
if (codec_index == 48) { codec_name = new QString("MuleLao-1");}
if (codec_index == 49) { codec_name = new QString("ROMAN8");}
if (codec_index == 50) { codec_name = new QString("Shift-JIS");}
if (codec_index == 51) { codec_name = new QString("TIS-620");}
if (codec_index == 52) { codec_name = new QString("TSCII");}
if (codec_index == 53) { codec_name = new QString("UTF-8");}
if (codec_index == 54) { codec_name = new QString("UTF-16");}
if (codec_index == 55) { codec_name = new QString("UTF-16BE");}
if (codec_index == 56) { codec_name = new QString("UTF-16LE");}
if (codec_index == 57) { codec_name = new QString("UTF-32");}
if (codec_index == 58) { codec_name = new QString("UTF-32BE");}
if (codec_index == 59) { codec_name = new QString("UTF-32LE");}

tableWidget->item(2,2)->setText(codec_name->toAscii());
tableWidget->resizeColumnsToContents();
tableWidget->resizeRowsToContents();
QTextCodec *codec=QTextCodec::codecForName(codec_name->toAscii());

QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForTr(codec);

QFont sansFont("Helvetica [Cronyx]", 12);
// loc_font.

status_label->setText("Кирилица, СР1251 маст хэв!");
status_label->setFont(sansFont);

status_label2->setText(("─юё ъюфшЁютър1 "));
status_label2->setFont(sansFont);
// status_label->setText(QString::fromAscii("Кирилица, СР1251 маст дай!"));
codec_index++;
}

Коллеги, куда копать?
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #1 : Февраль 06, 2012, 17:11 »

везде где используете вызов QString в атрибутах гуи вставляйте через trUtf8() и будет вам счастье
например
label->setText(trUtf8("Кирилица"));
Записан
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« Ответ #2 : Февраль 06, 2012, 17:12 »

да и код у вас уж больно индусский в необиду сказано...
в опервых проще тут поставить switch..case чем 30 if,
new QString вызывать не нужно, достаточно сразу указать "строка", извращения fromLatin тоже здесь не нужны.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.041 секунд. Запросов: 19.