Harrix Блог

  • Списки статей
    • Все статьи
    • IT
    • Qt
    • C++
    • Сложение двух чисел
    • Web программированиe
    • FAQ
    • Latex
    • Установка программ
    • Мифы
    • Видео
    • Про фото
  • Проекты
  • Harrix.org
  • RSS
  • Контакты

Крякозябры в Qt под Visual Studio

Как же я ненавидил эти крякозябры в Qt. C ними отладка превращалась в ужас.

31.07.2016 13 комментариев 13 630 просмотров

Итак, если вы используете версию Qt под компилятор Visaul Studio, то в консоле, где появляются сообщения об ошибках и предупреждениях, вместо русских букв будут появляться крякозабры. Будем это лечить.

Содержание

  • Крякозябры
  • Описание проблемы
  • Программное обеспечение
  • Выкачка исходных кодов jom
  • Изменение jom
  • Находим скомпилированный jom файл
  • Замена jom файла

Update 13.02.2017. Статья обновлена.

Крякозябры

Вот так выглядят крякозябры:

2016-07-31_193946

Описание проблемы

Данная проблема возникает, если использовать русскую версию Visual Studio, ввиду разных кодировок в консолях. В Qt нам нужна кодировка cp1251. К сожалению, если установить Visual Studio 2015 Community (про другие версии не знаю – не проверял) на русскую Windows с английским языком, то Visaul Studio перестает нормально работать внутри себя с C++ проектами. В общем, приходится ставит язык равный системному языку Windows. Но при этом тогда крякозябры появляются в Qt.

Предлагается много разных решений, но у меня не заработали почему-то (с реестром, батниками и др.). Константин Штепа предлагает такое решение:

Есть решение проблемы.
1) Скачиваете исходники jom c http://qt.gitorious.org/qt-labs/jom/ или с помощью git://gitorious.org/qt-labs/jom.git
2) Находите в них файл \src\app\main.cpp
3) Заменяете в нём строки
4) int main(int argc, char* argv[])
{
int result = 0;

на

int main(int argc, char* argv[])
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int result = 0;

5) Далее запускаете командную строку разработчика vs2012(или аналогичное), переходите в корневую папку jom и выполняете команды qmake и nmake. Далее просто копируете файлы из папки %jom%\bin\ в папку %qt-creator%\bin

Глупо, но работает. И никаких батников не надо(который к тому же мне не помог =( )

Но я глупый, не люблю работать с консолью и так далее. В общем «моя не понимать» как всё это сделать. Вот только сейчас решил всё-таки покопаться и разобрался. Ниже представлена подробная инструкция, а как же реализовать этот алгоритм.

Программное обеспечение

Всё описанное ниже проводилось на Windows 10. Были установлены Visual Studio 2015 Community, Qt 5.8.0 под Visual Studio.

Также потребуется git клиент для выкачки исходных кодов jom. Я использую GitHub Desktop. Если у вас его нет, то скачивайте, устанавливайте, заходите под учеткой GitHub.

Выкачка исходных кодов jom

Тут я буду объяснять как выполнить команду:

1
git clone https://git.gitorious.org/qt-labs/jom.git

Update 13.02.2017. Теперь по данному адресу не получить репозиторий. Нужно выполнить команду:

1
git clone https://github.com/qt-labs/jom

Если вы знаете как её выполнить, то переходите к следующему разделу.

Вся проблема, кроется в том, что специальная утилита jom (если я правильно понимаю, то она нужна для распараллеливания компиляции проекта), неправильно задает кодировку. Мы в ней исправим это и перекомпилируем утилиту самим же Qt.

В любом git клиенте самым главным инструментом является не GUI оболочка (хотя лично я больше её люблю), а консоль.

Запустим консоль. В GitHub Desktop – это GitHub Shell. Разумеется, что можно и без этого запустить git, но так проще.

2016-07-31_192405

Запустится такое синее окно:

2016-07-31_192425

Обратите внимание, что у меня «открывается» папка C:\Dropbox\GitHub, так как она настроена как основная папка по работе с git проектами. У вас будет другая папка.

2016-07-31_210049

Теперь тут прописываем команду:

1
git clone https://github.com/qt-labs/jom

и нажимаем Enter. После этого начнется клонирование проекта в вашу папку.

И в итоге у меня в папке C:\Dropbox\GitHub появилась папка jom.

Изменение jom

Открываем Qt Creator. И там переходим к пункту открытия проекта:

И в склонированной папке jom находим файл jom.pro и открываем его.

В подпроекте app находим файл main.cpp:

Находим так функцию main.

И там в самом начале этой функции добавляем строчки:

1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);

Сохраняем изменения Ctrl + S.

Компилировать будем в режиме Release:

И компилируем наш проект:

В процессе компиляции вы увидим несколько предупреждений. Это ничего страшного. Главное, чтобы ошибок не было.

Кстати, предупреждения будут с крякозябрами)

Через некоторое время серый треугольник запуска проекта опять станет зеленым. Значит, проект скомпилировался.

Находим скомпилированный jom файл

Закройте Qt.

Перейдите в папку, где у вас находятся скомпилированные файлы Qt.

По умолчанию, если у вас проект, например, называется HarrixTesting, то в папке HarrixTesting, где находится папка, появится папка наподобие такой: build-HarrixTesting-Desktop_Qt_5_5_0_MinGW_32bit-Release (это под MinGW компилятор пример).

В общем, у меня в этой папке

интересует папка bin

Там должен быть файл jom.exe:

Замена jom файла

Переходим в папку, где находится файл qtcreator.exe. У меня это папка C:\Qt\Qt5.8.0\Tools\QtCreator\bin.

Переименуйте его, чтобы на всякий случай не потерять, если что пойдет не так.

И вставьте сюда скомпилированный jom.exe файл.

Всё. Теперь можете запускать Qt и проверять крякозябры. У меня они ушли.

P.S. Меня смущает сильно уменьшенный размер jom.exe, но никаких проблем я не обнаружил.


Статьи по теме:

  1. Установка Qt под компилятор Visual Studio
  2. Графики в Qt через QCustomPlot
  3. Сложение двух чисел в Qt 5.4.0 на C++
  4. Сложение двух чисел из файла в Visual Studio 2015 на C++ (консольное Win32 приложение)

IT Qt, Visual Studio, Крякозябры

© 2014 Harrix