Russian Qt Forum

Qt => Вопросы новичков => Тема начата: alex_beginner от Январь 10, 2012, 14:26



Название: Не пойму про русские буквы
Отправлено: 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));

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

Как сделать правильно?


Название: Re: Не пойму про русские буквы
Отправлено: Bepec от Январь 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("Ещё текст"));


Название: Re: Не пойму про русские буквы
Отправлено: Пантер от Январь 10, 2012, 14:30
Не использовать кириллицу в исходниках. И поиском пользоваться.


Название: Re: Не пойму про русские буквы
Отправлено: alex_beginner от Январь 10, 2012, 14:50
Цитировать
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));

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

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

По поводу "Не использовать кириллицу" разберусь попозже. Пока не дорос...


Название: Re: Не пойму про русские буквы
Отправлено: Bepec от Январь 10, 2012, 14:54
Соглашусь с Пантером.

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

QTextEdit::codecForLocale() - текущая кодировка системы, если не ошибаюсь.


Название: Re: Не пойму про русские буквы
Отправлено: Пантер от Январь 10, 2012, 14:59
http://doc.qt.nokia.com/4.8-snapshot/internationalization.html


Название: Re: Не пойму про русские буквы
Отправлено: alex_beginner от Январь 10, 2012, 15:18
Вот так работает:

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

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

Спасибо.


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



Название: Re: Не пойму про русские буквы
Отправлено: Пантер от Январь 10, 2012, 15:22
Лучше раньше туда пойти. ;)


Название: Re: Не пойму про русские буквы
Отправлено: BRE от Январь 10, 2012, 15:24
Лучше раньше туда пойти. ;)
+1 и не пользоваться костылями с setCodecForTr.


Название: Re: Не пойму про русские буквы
Отправлено: alex_beginner от Январь 10, 2012, 15:34
Уже убедили - практически уже пошёл  :D

Теперь чисто познавательный вопрос - почему при использовании 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.

Почему может быть плохо?


Название: Re: Не пойму про русские буквы
Отправлено: andrew.k от Январь 10, 2012, 15:39
Потому что исходники у тебя в одной кодировке, а ты задаешь кодировку системы.
Надо вписывать жестко кодировку исходников, в твоем случае cp1251.


Название: Re: Не пойму про русские буквы
Отправлено: BRE от Январь 10, 2012, 15:39
Почему может быть плохо?
В твоих исходных файлах русский текст набирается в кодировке W1251. Компилируешь, запускаешь - программа определяет локальную кодировку (W1251) и настраивает кодек - все нормально. Теперь программа собирается и запускается на платформе с другой кодировкой по умолчанию (заметь русский текст в твоих исходниках так и остался W1251), программа определяет кодировку по умолчанию как ... и опа. :)


Название: Re: Не пойму про русские буквы
Отправлено: alex_beginner от Январь 10, 2012, 15:53
Да, действительно...

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

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

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

Я вот не в курсе - есть тут какие-то механизмы формирования документации к исходникам на основе комментариев?
С этим как дело обстоит?


Название: Re: Не пойму про русские буквы
Отправлено: BRE от Январь 10, 2012, 15:59
А я чего-то думал, что у меня исходники в UTF8 всегда.
Если у тебя исходники будут в utf8, то будет проще с разными платформами. Если используешь QtCreator, то там можно это настроить глобально.
Тогда в качестве временной меры для использования русского текста можно будет использовать (не устанавливая никаких глобальных кодеков) trUtf8().


Название: Re: Не пойму про русские буквы
Отправлено: ufna от Январь 10, 2012, 18:11
меня русские комментарии в тексте не в UTF всегда приводят в ужас. постоянно каракули  ;D

На самом деле в development стадии юзать codecFotTr - абсолютно нормально, или когда ЦП винда европейская. А вот production серьезного продукта - там уже свои правила :)