crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QT - консольное приложение
tumanovalex
  опции профиля:
сообщение 29.7.2010, 7:22
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 24
Регистрация: 6.8.2008
Пользователь №: 253

Спасибо сказали: 0 раз(а)




Репутация:   0  


Пытаюсь создать консольное приложение:
#include <QCoreApplication>
#include <QTextStream>
#include <QTextCodec>
#include <conio.h>

int main(int argc, char *argv[]) {
    QCoreApplication a(argc, argv);
    QTextCodec *cyrillicCodec = QTextCodec::codecForName("CP1251"); // Пробовал "IBM-866", "UTF-8"
    QTextCodec::setCodecForTr(cyrillicCodec);
    QTextCodec::setCodecForLocale(cyrillicCodec);
    QTextCodec::setCodecForCStrings(cyrillicCodec);
    QTextStream in(stdin), out(stdout); // Нашел в интернете
    out << "Русский текст" << '\n';
    qDebug("Русский текст 2");
    _getch();
    return(0);
}
Появились следующие вопросы:
1. Как правильно настроить вывод русских букв в консоле (при выводе qDebug вместо русских букв знаки вопросов)?
2. Почему не выводится текст в строке out << "Русский текст" << '\n'?
3. Есть ли аналог в QT функции _getch()?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.7.2010, 11:18
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


текст исходника написан в кодировке "X"
кодировка консоли - "Y"
внутренняя кодировка QString - UTF-16
Следовательно должно быть преобразование от кодировки "X" к QString, а зитем из QString в "Y".

Обычно делается так, исходник пишется в UTF-8, а внём такой код
QTextStream out(stdout)
QTextCodec *outCodec = QTextCodec::codecForName("IBM866"); // кодировка консоли
out.setCodec(outCodec);
QString str = trUtf8("тестовая строка.");  //из кодировки исходника будет преобразовано в UTF-16
out << str << endl; // т.к. кодек консоли задан явно, то str (в UTF-16) будет преобразован к кодировкеконсоли
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
tumanovalex
  опции профиля:
сообщение 29.7.2010, 12:57
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 24
Регистрация: 6.8.2008
Пользователь №: 253

Спасибо сказали: 0 раз(а)




Репутация:   0  


У меня Ваш вариант:
QTextCodec *outCodec = QTextCodec::codecForName("IBM866"); 
  out.setCodec(outCodec);
  QString str = QObject::trUtf8("тестовая строка.");
   out << str << endl;
не прошел, русские буквы отражаются неправильно. Получилось так:
  QTextCodec *cyrillicCodec = QTextCodec::codecForName("CP1251");
  //QTextCodec *cyrillicCodec = QTextCodec::codecForName("UTF8");
  QTextCodec::setCodecForTr(cyrillicCodec);
  QCoreApplication a(argc, argv);
  QTextStream in(stdin), out(stdout);
  QTextCodec *outCodec = QTextCodec::codecForName("IBM866");
  out.setCodec(outCodec);
  QString str = QObject::tr("тестовая строка.");
  out << str << endl;
Я работаю в Windows 7, может быть это из-за различия ОС?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.7.2010, 13:13
Сообщение #4


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(tumanovalex @ 29.7.2010, 16:57) *
не прошел
а исходник в UTF-8?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
tumanovalex
  опции профиля:
сообщение 29.7.2010, 14:36
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 24
Регистрация: 6.8.2008
Пользователь №: 253

Спасибо сказали: 0 раз(а)




Репутация:   0  


У меня в параметрах Qcreator Кодировка файла по умолчанию стоит System, посмотрел в редакторе - кодировка файла ANSI (кодировка Windows). Так что, наверное, из-за этого. Если делать кроссплатформенное приложение, то нужно использовать UTF-8 (чтобы переносить в Linux) и Ваш код?

Т.е. я хотел сказать, что System нужно поменять в редакторе на UTF-8 и использовать Ваш код?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.7.2010, 15:11
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(tumanovalex @ 29.7.2010, 18:36) *
то System нужно поменять в редакторе на UTF-8
исходник нужно преобразовать. Креатор этого не умеет.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
tumanovalex
  опции профиля:
сообщение 29.7.2010, 21:21
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 24
Регистрация: 6.8.2008
Пользователь №: 253

Спасибо сказали: 0 раз(а)




Репутация:   0  


Я сделал так:
1. В настройках QCreator я установил в кодировке файла по умолчанию UTF8.
2. Перекодировал Штирлицем файл и поправил.
Правильный вывод получился при таком коде:
QTextCodec *cyrillicCodec = QTextCodec::codecForName("UTF8");  
  QTextCodec::setCodecForTr(cyrillicCodec);
  QCoreApplication a(argc, argv);
  QTextStream out(stdout);
  QTextCodec *outCodec = QTextCodec::codecForName("IBM866");
  out.setCodec(outCodec);
  out << QObject::tr("Русский текст") << endl;
Теперь все правильно или я еще где-нибудь допустил ошибку?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.11.2024, 21:43