Russian Qt Forum
Ноябрь 24, 2024, 05:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Не пойму про русские буквы  (Прочитано 6464 раз)
alex_beginner
Гость
« : Январь 10, 2012, 14:26 »

Делаю так:

Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->w1->SetLabels("Русский текст","Ещё текст");
}

void test::SetLabels(const char *s1,const char *s2)
{
    ui->l1->setText(QApplication::translate("test", s1, 0, QApplication::UnicodeUTF8));
    ui->l2->setText(QApplication::translate("test", s2, 0, QApplication::UnicodeUTF8));
}

В результате пишет по-нерусски. А Вот это из файла ui_MainWindow.h

Код:
        label->setText(QApplication::translate("MainWindow", "\320\222\321\200\320\265\320\274\321\217 \320\275\320\260\321\207\320\260\320\273\320\260", 0, QApplication::UnicodeUTF8));

пишет по-русски (я думал, что сделал по аналогии, но видимо нет).

Как сделать правильно?
Записан
Bepec
Гость
« Ответ #1 : Январь 10, 2012, 14:30 »

Используй тег tr("") и QTextCodec.

Поясню - в файле интерфейса, используется кодировка UTF8(цифры это коды символов через слеш).

Строчкой
Код:
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
ты указываешь, какая кодировка у тебя в теге tr("")

Код:
#include <QTextCodec>
... текст программы ...
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
ui->w1->SetLabels(tr("Русский текст"),tr("Ещё текст"));
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Январь 10, 2012, 14:30 »

Не использовать кириллицу в исходниках. И поиском пользоваться.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
alex_beginner
Гость
« Ответ #3 : Январь 10, 2012, 14:50 »

Цитировать
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));

Спасибо, помогло. Но смущает "Windows-1251".

А что произойдёт с этим проектом в линуксе? Можно как-то вместо "Windows-1251" как-то сказать "Та_которая_используется_в_системе" ?

По поводу "Не использовать кириллицу" разберусь попозже. Пока не дорос...
Записан
Bepec
Гость
« Ответ #4 : Январь 10, 2012, 14:54 »

Соглашусь с Пантером.

А использоваться в системе, может и не русская кодировочка Веселый

QTextEdit::codecForLocale() - текущая кодировка системы, если не ошибаюсь.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Январь 10, 2012, 14:59 »

http://doc.qt.nokia.com/4.8-snapshot/internationalization.html
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
alex_beginner
Гость
« Ответ #6 : Январь 10, 2012, 15:18 »

Вот так работает:

QTextCodec::setCodecForTr(QTextCodec::codecForLocale());

А про интернационализацию почитал по ссылке маленько, и понял, что конечно же идти надо именно туда.  Туда и пойду в итоге  Веселый

Спасибо.
Записан
BRE
Гость
« Ответ #7 : Январь 10, 2012, 15:22 »

Вот так работает:
QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
Нет. Если ты попробуешь собрать свою программу на платформе с другой локалью, то вместо русских букв ты увидишь каракули.

Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Январь 10, 2012, 15:22 »

Лучше раньше туда пойти. Подмигивающий
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
BRE
Гость
« Ответ #9 : Январь 10, 2012, 15:24 »

Лучше раньше туда пойти. Подмигивающий
+1 и не пользоваться костылями с setCodecForTr.
Записан
alex_beginner
Гость
« Ответ #10 : Январь 10, 2012, 15:34 »

Уже убедили - практически уже пошёл  Веселый

Теперь чисто познавательный вопрос - почему при использовании codecForLocale() на других платформах будут каракули?

Цитировать
Returns a pointer to the codec most suitable for this locale.
On Windows, the codec will be based on a system locale. On Unix systems, starting with Qt 4.2, the codec will be using the iconv library.

Почему может быть плохо?
Записан
andrew.k
Гость
« Ответ #11 : Январь 10, 2012, 15:39 »

Потому что исходники у тебя в одной кодировке, а ты задаешь кодировку системы.
Надо вписывать жестко кодировку исходников, в твоем случае cp1251.
Записан
BRE
Гость
« Ответ #12 : Январь 10, 2012, 15:39 »

Почему может быть плохо?
В твоих исходных файлах русский текст набирается в кодировке W1251. Компилируешь, запускаешь - программа определяет локальную кодировку (W1251) и настраивает кодек - все нормально. Теперь программа собирается и запускается на платформе с другой кодировкой по умолчанию (заметь русский текст в твоих исходниках так и остался W1251), программа определяет кодировку по умолчанию как ... и опа. Улыбающийся
Записан
alex_beginner
Гость
« Ответ #13 : Январь 10, 2012, 15:53 »

Да, действительно...

А я чего-то думал, что у меня исходники в UTF8 всегда.

Ладно, понятно...

Получается, и комментарии нежелатьельно писать по-русски. Я ж их не прочитаю потом.
Меня это не очень смущает, но...

Я вот не в курсе - есть тут какие-то механизмы формирования документации к исходникам на основе комментариев?
С этим как дело обстоит?
Записан
BRE
Гость
« Ответ #14 : Январь 10, 2012, 15:59 »

А я чего-то думал, что у меня исходники в UTF8 всегда.
Если у тебя исходники будут в utf8, то будет проще с разными платформами. Если используешь QtCreator, то там можно это настроить глобально.
Тогда в качестве временной меры для использования русского текста можно будет использовать (не устанавливая никаких глобальных кодеков) trUtf8().
« Последнее редактирование: Январь 10, 2012, 16:00 от BRE » Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.163 секунд. Запросов: 24.