QT4+MinGW+windows = глюки с русскими буквами
Код:
QMessageBox::information(0, "бла бла бла", "бла бла бла", 32);
прога выдает месажбокс с какимето крякозяблями вместо "бла бла бла". Что характерно, англицкие буквы воспринимаются на ура.
Как мне заставить его нормально писАть по-русски? Может какую-то опцию при компиляции задать?
Код:
QMessageBox::information(0, L"бла бла бла", L"бла бла бла", 32);
Код:
src\main.cpp:15: error: no matching function for call to `QMessageBox::information(int, const wchar_t[8], const wchar_t[8], int)'
----
Код:
information(int, const wchar_t[8], const wchar_t[8], int)
wchar_t - юникодный символ, поэтому вызов надо писать так как я выше написал, с префиксами "L" у строк.
Ну я же написал в предыдущем посте, какую ошибку выдает компилятор при использовании префикса - что-то типа "нет совпадающей функции для вызова".
Напиши точную сигнатуру функции
1. Править исходники QT4 если возможно. Например найти там параметр типа LOGFONT и в его свойстве lfCharSet поставить RUSSIAN_CHARSET (или поэкспериментировать ANSI_CHARSET // DEFAULT_CHARSET).
2. Править реестр в ключе, HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage, параметры 1250 и 1252 на 1251.nls. Затем перезагрузить комп. Может помочь - правда только на компе, где такие поправки внесены.
3. Мало вероятно, но может там тоже кодировка OEM? Тогда смотрите тему русский текст в консоли :)
- там в рееестре уже стоит 1251.nls
- попробовал ф-ю CharToOem() - результат монопенисуальный. :(
так что извините...
------
Вот в опциях мелкомягкого компилятора в VS есть опция "Character Set" - "Use Multibyte Character Set.".
Может для MinGW тоже есть что-то подобное?
я подозреваю, что или компилер или QT не понимают набора кириллических символов.. типа "charset=RUSSIAN_CHARSET".
Код:
QTextCodec *codec = QTextCodec::codecForName("WINDOWS-1251");
QMessageBox::information(
0,
codec->toUnicode("Заголовок."),
codec->toUnicode("Сообщение."),
QMessageBox::Ok,
0
);
QMessageBox::information(
0,
codec->toUnicode("Заголовок."),
codec->toUnicode("Сообщение."),
QMessageBox::Ok,
0
);
Можно еще установить другой дефолтовый кодек для C-строк. По умолчанию, по-моему, стоит кодек для UTF-8, нужно поставить для win-1251. Тогда можно забыть о постоянных toUnicode(). Можно почетать об этом в справке Qt.
В общем сспасибо.. Нашел я как этот кодек ставить:
Код:
QTextCodec::setCodecForCStrings( QTextCodec::codecForName("UTF-8") );
Цитата: H010d Freeze
Можно еще установить другой дефолтовый кодек для C-строк. По умолчанию, по-моему, стоит кодек для UTF-8, нужно поставить для win-1251. Тогда можно забыть о постоянных toUnicode(). Можно почетать об этом в справке Qt.
Как раз таки UTF-8 куда более универсально, если программа претендует на исспользование где либо еще кроме нашей родины. )
Собственно потому 0xf001 все правильно сделал. )
Цитата:
Как раз таки UTF-8 куда более универсально, если программа претендует на исспользование где либо еще кроме нашей родины. )
Согласен, но это уже совсем другая история :). Для интернационализации код должен писаться не так, как был представлен в первом посте:
Цитата:
QMessageBox::information(0, "бла бла бла", "бла бла бла", 32);
А для такого кода win-1251 - ИМХО, то что надо :).
Ну это да. Я думаю только что это был просто тест и автор учиться исспользовать QT?
utf8 (см.пост выше) я поставил при компиляции в линуксе, там как не странно тоже такие крякозябли выскакивали... Под виндой проверю, когда загружу. Может там нужно менять на cp1251.