Не отображаются русские символы и буквы в программе C++ и Qt.

Отображение русских символов в Qt

Отображение русских символов в Qt

Добрый день, читатель. По умолчанию русские символы в программах с использованием Qt фреймворка отображаются некорректно. Вместо них используются непонятные знаки. Эта проблема появляется при открытии исходников программ, при выводе русских букв в консоль, при выводе русских букв в виджеты (Label, PlainText и т.д.). В этой статье содержатся решения этих проблем. На сайте уже имеется статья, в которой показано решение проблемы отображения русских букв при выводе в консоль на C++.

Русские символы в исходном коде

Бывает возникает проблема с кодировкой при открытии исходных текстов программ в Qt Creator, чаще всего такая проблема возникает у пользователей Windows. Дело в том, что при написании программы исходники иногда сохраняются в одной кодировке, а редактор в Qt Creator открывает по умолчанию в другой кодировке. Из-за этого вместо русских букв появляются кракозябры или знаки вопроса. По умолчанию в настройках редактора кода Qt Creator кодировка файлов устанавливается System, т.е. кодировка операционной системы. Linux чаще всего использует UTF-8, а Windows cp1251.

Проблема с кодировкой в редакторе Qt Creator

Проблема с кодировкой в редакторе Qt Creator

Для решения проблемы в верхнем меню Qt Creator следует выбрать Инструменты(Tools) — Параметры…(Settings…). В открывшемся окне слева в списке найти и выбрать Текстовый редактор(Text Editor), далее выбираем вкладку Поведение(Behavior). Находим группу настроек Кодировки файлов(Encoding files) и выбираем кодировку по умолчанию(default) — UTF-8. Теперь редактор будет открывать исходники в UTF-8, исходные тексты программ чаще всего пишутся именно в этой кодировке.

После настройки редактора следует перекодировать сами исходники. Это можно сделать в Notepad++, если вы пользователь Windows.

Можно открывать файлы и в других кодировках, для этого в верхнем меню следует выбрать Правка — Выбрать кодировку, а далее найти кодировку, в которой был сохранен исходник программы.

В итоге редактор будет сохранять исходники в новых проектах в UTF-8 и корректно открывать их после.

Русские символы в виджетах Qt

Помещая русские символы в поле Text в виджете Label или в другие виджеты, можно также столкнуться с проблемой отображения русских букв. В редакторе форм русские символы в виджеты устанавливаются и отображаются нормально, а вот при установки программным путем — нет.

Поместим русские символы в виджет Label и в PushButton в редакторе форм.

Русские символы в редакторе форм Qt

Русские символы в редакторе форм Qt

Как видно, они отображаются корректно. Далее скомпилируем и запустим программу.

Отображение русских символов в виджетах

Отображение русских символов в виджетах

Отображение символов корректно. Теперь в изменим текст в виджетах программным путем, для этого в редакторе кода в файле mainwindow.cpp в конструктор добавим пару строк:

А затем скомпилируем и запустим программу.

Проблемы с отображением русских символов

Проблемы с отображением русских символов

Как видно, проблема имеет место быть, но решить ее очень легко.

Для этого устанавливаем текст с помощью функции trUtf8().

Скомпилируем и запустим программу.

Корректное отображение с trUtf8()

Корректное отображение с trUtf8()

Проблема решена, но если таких выводов в программе много, то вставка текста через функцию нерациональна с точки зрения времени. Можно решить проблему не прибегая к функции trUtf8(), для этого нужно лишь задать кодеки в программе. В файле main.cpp подключаем заголовок QTextCodec.

В начало функции main.cpp добавляем следующие строчки:

Устанавливаем текст в виджетах в файле mainwindow.cpp без функции trUtf8()

Компилируем и запускаем.

Корректное отображение русских символов с установленным кодеком

Корректное отображение русских символов с установленным кодеком

Отображение символов корректно, теперь не нужно прибегать к функции trUtf8(). Проблема решена.

Кстати, в последних версиях Qt такой проблемы с кодировкой у меня не наблюдалось.

Для примера был создан стандартный проект Qt Widgets. Поэтому после решения проблем с кодировкой файл main.cpp содержит следующий код

Вывод русских символов в консоль с Qt

Если русские символы в консоль выводятся некорректно через qDebug(), то решение для этого такое же, как и решение с отображением русских символов в виджетах Qt.

А если Вы пишете без Qt и у вас проблемы русскими символами при выводе в консоль, то почитайте статью, там есть решение — Русские символы(буквы) при вводе/выводе в консоль на C++.

Надеюсь, что статья Вам чем-то помогла.

Спасибо за внимание.

Не отображаются русские символы и буквы в программе C++ и Qt.: 1 комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *