Здравствуйте. Уже неделю гадаю на кофейной гуще, печатаю и курю маны. Приходили волхвы, сказали спросить на форуме.
Исходники пишутся в 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++;
}
Коллеги, куда копать?
везде где используете вызов QString в атрибутах гуи вставляйте через trUtf8() и будет вам счастье
например
label->setText(trUtf8("Кирилица"));
да и код у вас уж больно индусский в необиду сказано...
в опервых проще тут поставить switch..case чем 30 if,
new QString вызывать не нужно, достаточно сразу указать "строка", извращения fromLatin тоже здесь не нужны.