В статье рассказывается об одном костыле для отображения русских букв в консольных приложениях 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(); } |
Решение.
Прописываем нужные кодировки:
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(); } |
Если используйте переменные, то будет попроще:
1 2 |
QString S="Здравствуйте!"; cout << S.toLocal8Bit().data(); |