Harrix Блог

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

Русские буквы в консольных приложениях Qt

В статье рассказывается об одном костыле для отображения русских букв в консольных приложениях Qt. В статье рассматривается приложение на основе Qt 5.4.0.

09.02.2015 2 комментария 11 851 просмотров

В статье рассказывается об одном костыле для отображения русских букв в консольных приложениях Qt. В статье рассматривается приложение на основе Qt 5.4.0.

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

Суть проблемы. В стандартной консольной программе вместо русского текста будет выведены крякозабры:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <QCoreApplication>
 
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    cout << "Привет!";
 
    return a.exec();
}

2015-02-09_103754

Решение.

Прописываем нужные кодировки:

1
2
3
4
5
6
7
#ifdef Q_OS_WIN32
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("IBM 866"));
#endif
 
#ifdef Q_OS_LINUX
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
#endif

Нужно будет еще подключить:

1
#include <QTextCodec>

А текст отображаем в виде костыля:

1
QString::fromUtf8("Текст").toLocal8Bit().data()

Программа в итоге будет выглядеть так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <QCoreApplication>
 
#include <iostream>
 
#include <QTextCodec>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
#ifdef Q_OS_WIN32
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("IBM 866"));
#endif
 
#ifdef Q_OS_LINUX
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
#endif
 
    cout << QString::fromUtf8("Привет!").toLocal8Bit().data();
 
    return a.exec();
}

2015-02-09_104108

Если используйте переменные, то будет попроще:

1
2
    QString S="Здравствуйте!";
    cout << S.toLocal8Bit().data();


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

  1. FAQ по Qt
  2. Как сохранять из QTableView данные в CSV формат
  3. Как сохранить данные из QTextEdit в ODF
  4. Сложение двух чисел в Qt 5.4.0 на C++ (консольное приложение)

IT C++, Qt

© 2014 Harrix