Вывод кириллицы в консоли QT5
Распространённая у новичков проблема :) Следует понимать, что QT – кроссплатформенный продукт. Удовлетворительного решения для вывода кириллицы именно в консоли Windows (в отличие от Linux) нет. В QT5 можно попробовать:
QTextCodec *coding = QTextCodec::codecForName("utf-8"); coding->setCodecForLocale(coding);
или
system("chcp 65001");
если ваши файлы в Юникоде (UTF-8). Соответственно, "cp-1251"
и "chcp 1251"
для российской кодировки Windows. Сам текст файла .cpp
, конечно же, тоже должен быть сохранён в нужной кодировке.
Популярное в сети решение с вызовом setCodecForCStrings
и setCodecForTr
работало только до QT4 включительно. А лучше делать свою консоль на основе QTextEdit
, кроме работы с кодировками, будут возможности для оформления. Кроме того, для написания современных приложений следует, в общем случае, предпочитать Юникод.
Консольное приложение может быть реализовано и без использования класса QCoreApplication
. В этом случае работа со стандартной консолью Windows возможна следующим образом:
#include <QTextStream> #include <conio.h> int main() { QTextStream cin(stdin); cin.setCodec("CP866"); QTextStream cout(stdout); cout.setCodec("CP866"); cout << QString::fromUtf8("Введите ваше имя: "); cout.flush(); QString name; cin >> name; cout << QString::fromUtf8("Привет, ") << name << QString::fromUtf8("!") << endl; return 0; }
Проверено в Windows 7 + QT5.2.1, сработало. Обратите внимание, что кодировка консоли здесь именно CP866 (DOS), как и было для DOS-приложений.
Кроме того, можно пользоваться стандартными возможностями C++ (setlocale
)
P.S. В более новых сборках QT 5 со средой Creator 4.X приходилось также указывать CP866 только для ввода, а для вывода CP1251 (пример кода для консоли QT 5 показан ниже), менять шрифт, назначенный для консольных приложений и т.п. В целом, думаю, на проблеме зацикливаться не стоит, все ваши реальные приложения всё равно будут не-консольными и в UTF-8 :)
#include <iostream> #include <QTextStream> using namespace std; int main() { setlocale(LC_ALL, "Rus"); QTextStream cin(stdin); cin.setCodec("CP866"); QTextStream cout(stdout); cout.setCodec("CP1251"); QString name; cout << QString::fromUtf8("Как Вас зовут? ") << endl; cin >> name; cout << QString::fromUtf8("Привет, ") << name << "!"; return 0; }
02.02.2016, 17:24 [14721 просмотр]