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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 5.x - если исходники в кодировке Win-1251  (Прочитано 5363 раз)
Maxz
Гость
« : Июнь 22, 2013, 23:49 »

Собрался таки с духом перейти на Qt 5.0.2 c Qt 4.8.
Стал пересобирать проект (большой), напоролся на несколько костылей, но они решились быстро. Но выяснилась проблема - как выяснилось, с 5-ой версии больше не будут поддерживаться исходники в любой иной кодировке, кроме как в юникоде (тут написано - http://www.prog.org.ru/index.php?topic=24187.msg172513#msg172513 ). А мне это как-то влом - перегонять кучу файлов (исходники в Win-1251) в юникод, а потом еще маяться с обратным перекодированием (пользуюсь старым текстовым редактором, он UTF-8 плохо переваривает). Или пользоваться лингвистом (проект чисто для русскоязычных). Решение проблемы собственно такое:

Где-то объявляем глобальную переменную и функцию для перекодирования:
Код:
extern  QTextCodec      *_codec;            //! кодек для программирования
QString FTr(QByteArray __rustext);             //! перевод в UTF-8 для программирования

Далее реализация:
Код:
QTextCodec  *_codec=QTextCodec::codecForName("Windows-1251");

//-----------------------------------------------------
//! преобразование Windows-1251 в UNICODE (UTF-8)
//-----------------------------------------------------
QString FTr(QByteArray __rustext){
  return _codec->toUnicode(__rustext);
}

Ну и далее по всему текстку вместо использования Qt-шной tr() делаем нечто такое:
Код:
QString _text=FTr("Мой текст на русском");
QString _text2=FTr(QByteArray("Текст на русском с переменными ").append(_peremennaja).append(" еще текст"));
QMessageBox::warning(0, FTr("Ошибка"),_text+FTr("Не могу создать файл"));

Может быть, кому-то пригодится
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #1 : Июнь 23, 2013, 00:01 »

костыль ужаснейший. если вдруг тому, кто использует подобный метод, понадобится перевести программу на другой язык, то он не сможет этого сделать. намного проще перейти на юникод (на дворе 2013 год между прочим), сконвертировать все файлы одним махом (под виндой должно существовать что-то типа iconv) и установить современный текстовый редактор (например sublime text или notepad++).

еще и переменную в метод передаешь по значению вместо константной ссылки.
« Последнее редактирование: Июнь 23, 2013, 00:04 от kambala » Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #2 : Июнь 23, 2013, 12:04 »

Это решает все проблемы:
Цитировать
I highly recommend choosing the former option: use UTF-8 in your source code.
http://www.macieira.org/blog/2012/05/source-code-must-be-utf-8-and-qstring-wants-it/
Это поможет:
http://anton-pribora.ru/recoder/
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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