Поиск:

Ответ в темуСоздание новой темы Создание опроса
> удаленное использование русского текста 
V
    Опции темы
gordmiand
Дата 11.4.2010, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



Код

                                               File1.h:
const QString stroka=”привет всем QT-шникам”;


                                              Main.cpp:
QTextCodec::setCodecForCStrings( QTextCodec::codecForName( "Windows-1251" ) );

                                              MyModul.cpp:
#include "File1.h"

lineEdit->setText(stroka);

Если выводимая строка stroka инициализирована  там же, где она и используется (в MyModul.cpp), то за счет использования QTextCodec из Main.cpp все выводится по-русски, а если я эту строку определяю в другом файле (хидере) и сюда его подключаю –  иероглифы…как мне теперь это исправить?

Пробовал использовать “локальный” перевод на русский язык типа :
Код

QString str="прeвед";
    QTextCodec * codec = QTextCodec::codecForName("Windows-1251");
    QString tmp = codec->fromUnicode(str);
         lineEdit->setText(tmp);

ничего не получается – все равно иероглифы….и при UTF-8, KOI8-R – тоже самое…как быть???

Это сообщение отредактировал(а) gordmiand - 11.4.2010, 00:46
PM MAIL   Вверх
gordmiand
Дата 11.4.2010, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



пробовал перенести каким-то образом 
Код

QTextCodec::setCodecForCStrings( QTextCodec::codecForName( "Windows-1251" ) );

в файл  File1.h, но возникающая ошибка говорит о необходимости использования данного оператора в конструкторе/ деструкторе....
так как же быть с этим пресловутым русским текстом? 
PM MAIL   Вверх
КESТ
Дата 11.4.2010, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 31.3.2009

Репутация: нет
Всего: нет



может быть lineEdit->setText(tr(stroka)); ? 
PM MAIL   Вверх
gordmiand
Дата 11.4.2010, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



 на 
Код

QString stroka="прeвед";
ui->lineEdit->setText(tr(stroka));

выдается ошибка  no matching function for call to 'MainWindow::tr(QString&)'...
PM MAIL   Вверх
gordmiand
  Дата 12.4.2010, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



 smile неужели нельза в приложении использовать русский текст (стринговый массив), описанный в отдельном от проекта обычном хидере?  
PM MAIL   Вверх
djamshud
Дата 12.4.2010, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 5
Всего: 39



Вы с этим вопросом на форуме бьетесь черт знает сколько времени вместо того, чтобы подумать или почитать, как вообще работают QTextCodec-и...

Окей, инструкция по применению: сначала должен быть вызван setCodecForCStrings, а уже потом инициализироваться строка - тогда кодировка выставится верно. В вашем случае инициализация строк происходит до main и всего, что внутри нее.

Что делать:
а) вынести инициализацию строк в main после вызова кодека;
б) перекодировать строки позже, как - читайте документацию.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
gordmiand
Дата 12.4.2010, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



1. то есть этот русскоязычный текстовый массив надо инициализировать все-таки в main.h?
тогда зачем еще какие-то перекодировки (п. б)? если нельзя в проекте корректно отобразить русский текст из массива, описанного в отдельном хидере, то тогда я проще опишу этот массив в том модуле, где и использую сей текст... 
2. что значит "перекодировать строки" (какие?)?
если как-то так
Код

QString str="прeвед";
    QTextCodec * codec = QTextCodec::codecForName("Windows-1251");
    QString tmp = codec->fromUnicode(str);
         lineEdit->setText(tmp);

то не работает...
PM MAIL   Вверх
djamshud
Дата 12.4.2010, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 5
Всего: 39



1. Компилятору откровенно наплевать, в .h или в .cpp вы пишите, он компилирует в конечном счете один .cpp файл. 

int main(int,char**){
QTextCodec ...
QString array[]=...
return 0;
};

Или объявление array можно вынести наружу, но инициализировать все равно за QTextCodec

2. Когда бездумно пытаешься соединить разные кусочки, собранные на форуме, обычно так и получается, что ничего не работает. Мой вам совет: открыть для себя Qt Assistant и еще было бы неплохо учебник по с++ наверное.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
gordmiand
Дата 13.4.2010, 05:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



ну я и говорю, что инициализировать стринговый массив придется все-таки уже в самой программе (после кодека), а не в отдельном файле (хидере)...думал, что можно иначе - все сделать вне программы, а в ней только обращатсья к элементам массива....ну да ладно....
а все-таки - почему приведенный ниже код не работает (типа "принудительный" (то есть не в main для всего проекта) перевод на русскую раскладку)?
Код

QString str="прeвед";
    QTextCodec * codec = QTextCodec::codecForName("Windows-1251");
    QString tmp = codec->fromUnicode(str);
         lineEdit->setText(tmp);

PM MAIL   Вверх
SABROG
Дата 13.4.2010, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Цитата(gordmiand @  13.4.2010,  05:33 Найти цитируемый пост)
Код

QString tmp = codec->fromUnicode(str);

У тебя проблемы с пониманием действий методов. Читай документацию. fromUnicode() переводит строку в кодировке Unicode 5.0 в кодировку Windows-1251.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0689 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.