Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

QT4+MinGW+windows = глюки с русскими буквами

1.9K
12 июня 2008 года
0xf001
96 / / 24.05.2005
Я пишу в проге функцию вызова месажбокса:
 
Код:
QMessageBox::information(0, "бла бла бла", "бла бла бла", 32);

прога выдает месажбокс с какимето крякозяблями вместо "бла бла бла". Что характерно, англицкие буквы воспринимаются на ура.
Как мне заставить его нормально писАть по-русски? Может какую-то опцию при компиляции задать?
6.6K
13 июня 2008 года
Ordos
105 / / 02.11.2007
А какой вид строк принимает функция? может юникод? Попробуй писать так:
 
Код:
QMessageBox::information(0, L"бла бла бла", L"бла бла бла", 32);
1.9K
13 июня 2008 года
0xf001
96 / / 24.05.2005
 
Код:
src\main.cpp:15: error: no matching function for call to `QMessageBox::information(int, const wchar_t[8], const wchar_t[8], int)'

----
6.6K
13 июня 2008 года
Ordos
105 / / 02.11.2007
Ну дык у тебя функция юникодную строку получает:
 
Код:
information(int, const wchar_t[8], const wchar_t[8], int)


wchar_t - юникодный символ, поэтому вызов надо писать так как я выше написал, с префиксами "L" у строк.
1.9K
13 июня 2008 года
0xf001
96 / / 24.05.2005
Ну я же написал в предыдущем посте, какую ошибку выдает компилятор при использовании префикса - что-то типа "нет совпадающей функции для вызова".
6.6K
13 июня 2008 года
Ordos
105 / / 02.11.2007
Напиши точную сигнатуру функции
87
14 июня 2008 года
Kogrom
2.7K / / 02.02.2008
С QT4 не работал, но опыт подсказывает 3 варианта решения.

1. Править исходники QT4 если возможно. Например найти там параметр типа LOGFONT и в его свойстве lfCharSet поставить RUSSIAN_CHARSET (или поэкспериментировать ANSI_CHARSET // DEFAULT_CHARSET).

2. Править реестр в ключе, HKLM\SYSTEM\CurrentControlSet\Control\Nls\CodePage, параметры 1250 и 1252 на 1251.nls. Затем перезагрузить комп. Может помочь - правда только на компе, где такие поправки внесены.

3. Мало вероятно, но может там тоже кодировка OEM? Тогда смотрите тему русский текст в консоли :)
1.9K
14 июня 2008 года
0xf001
96 / / 24.05.2005
- исходники QT большие, так что особо не покопаешся.
- там в рееестре уже стоит 1251.nls
- попробовал ф-ю CharToOem() - результат монопенисуальный. :(
так что извините...
------
Вот в опциях мелкомягкого компилятора в VS есть опция "Character Set" - "Use Multibyte Character Set.".
Может для MinGW тоже есть что-то подобное?
1.9K
15 июня 2008 года
0xf001
96 / / 24.05.2005
Короче, редактор QDevelop, как оказалось кодировал файлы в utf8. Я ему поставил windows-1251. Вот результат (с другими кодировками аналогичные результаты)

я подозреваю, что или компилер или QT не понимают набора кириллических символов.. типа "charset=RUSSIAN_CHARSET".
7.3K
16 июня 2008 года
H010d Freeze
143 / / 08.08.2006
 
Код:
QTextCodec *codec = QTextCodec::codecForName("WINDOWS-1251");
QMessageBox::information(
  0,
  codec->toUnicode("Заголовок."),
  codec->toUnicode("Сообщение."),
  QMessageBox::Ok,
  0
);
7.3K
16 июня 2008 года
H010d Freeze
143 / / 08.08.2006
Можно еще установить другой дефолтовый кодек для C-строк. По умолчанию, по-моему, стоит кодек для UTF-8, нужно поставить для win-1251. Тогда можно забыть о постоянных toUnicode(). Можно почетать об этом в справке Qt.
1.9K
24 июня 2008 года
0xf001
96 / / 24.05.2005
H010d Freeze
В общем сспасибо.. Нашел я как этот кодек ставить:
 
Код:
QTextCodec::setCodecForCStrings( QTextCodec::codecForName("UTF-8") );
240
25 июня 2008 года
aks
2.5K / / 14.07.2006
Цитата: H010d Freeze
Можно еще установить другой дефолтовый кодек для C-строк. По умолчанию, по-моему, стоит кодек для UTF-8, нужно поставить для win-1251. Тогда можно забыть о постоянных toUnicode(). Можно почетать об этом в справке Qt.


Как раз таки UTF-8 куда более универсально, если программа претендует на исспользование где либо еще кроме нашей родины. )

Собственно потому 0xf001 все правильно сделал. )

7.3K
25 июня 2008 года
H010d Freeze
143 / / 08.08.2006
Цитата:

Как раз таки UTF-8 куда более универсально, если программа претендует на исспользование где либо еще кроме нашей родины. )


Согласен, но это уже совсем другая история :). Для интернационализации код должен писаться не так, как был представлен в первом посте:

Цитата:

QMessageBox::information(0, "бла бла бла", "бла бла бла", 32);


А для такого кода win-1251 - ИМХО, то что надо :).

240
25 июня 2008 года
aks
2.5K / / 14.07.2006
Ну это да. Я думаю только что это был просто тест и автор учиться исспользовать QT?
1.9K
30 июня 2008 года
0xf001
96 / / 24.05.2005
Да, это был просто тест и я учился исспользовать QT :)
utf8 (см.пост выше) я поставил при компиляции в линуксе, там как не странно тоже такие крякозябли выскакивали... Под виндой проверю, когда загружу. Может там нужно менять на cp1251.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог