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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] QT и русский язык  (Прочитано 21764 раз)
sergeyvl12
Гость
« : Август 25, 2009, 17:53 »

Добрый день!

Вобщем проблем я русским языком в QT у меня не было ... до сегодняшнего дня.

Сегодня прикрутил к модели таблицы русские названия хидеров:

Код:
QVariant CreditTableModel::headerData ( int section, Qt::Orientation orientation, int role ) const
{
    if ( role == Qt::DisplayRole && orientation == Qt::Horizontal )
    {
        switch( section )
        {
            case colPaymentDate:
                return "Дата";
            case colPaymentAmount:
                return "Сумма";
            case colPercent:
                return "Процент";
...
            default:
                return QVariant();

        }
    }

    return QVariant();

}

Вывелись каракули ...

И это при всем при том что остальные контролы (добавленные в дизайнере) выводятся нормально.

Посмотрел как это делается в ui_mainwindow.h и ужаснулся... Пример:

Код:
label_3->setText(QApplication::translate("MainWindow", "\320\224\320\260\321\202\320\260", 0, QApplication::UnicodeUTF8));

Люди добрые! Как мне програмно формировать нормальные русские сообщения?

P.S. Если я не пользуюсь дизайнером, а создаю все контролы програмно, все работает ок.
« Последнее редактирование: Август 26, 2009, 09:20 от sergeyvl12 » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #1 : Август 25, 2009, 17:57 »

Используй tr.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #2 : Август 25, 2009, 18:10 »

Более поясню ты скорее всего пишешь под виндой а значит кодировка файла win1251 а Qt работает с Utf-8 поэтому у тебя и получаются каракули, у тебя есть два варианта либо использовать QTextCodec и каждое русское слово в коде перегонять в Utf-8 либо использовать локализацию ,а то бишь писать всё на английском и все слова в коде помещать в tr(), а потом при помощи QtLinguist переводить на любой угодный тебе язык, от себя добавлю второй вариант более приемлем.
Записан
BRE
Гость
« Ответ #3 : Август 25, 2009, 18:16 »

Более поясню ты скорее всего пишешь под виндой а значит кодировка файла win1251 а Qt работает с Utf-8 поэтому у тебя и получаются каракули, у тебя есть два варианта либо использовать QTextCodec и каждое русское слово в коде перегонять в Utf-8 либо использовать локализацию ,а то бишь писать всё на английском и все слова в коде помещать в tr(), а потом при помощи QtLinguist переводить на любой угодный тебе язык, от себя добавлю второй вариант более приемлем.
И третий вариант: использовать QtCreator (может есть и другие среды), установив кодировку исходников Utf-8 и пользоваться trUtf8().
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Август 25, 2009, 19:02 »

>>Qt работает с Utf-8
Неа, не работает с UTF-8, внутреннее представление в UTF-16. А кодировка исходника сама по себе.
Записан

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

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #5 : Август 25, 2009, 19:11 »

Тролли рекомендуют не использовать расширенную таблицу для исходников.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
ecspertiza
Супер
******
Offline Offline

Сообщений: 1053


С уважением, мастер конфетного цеха!


Просмотр профиля
« Ответ #6 : Август 25, 2009, 19:51 »

Во скока нового узнал Улыбающийся
Записан
sergeyvl12
Гость
« Ответ #7 : Август 26, 2009, 09:20 »

спасибо всем!

пойду покурю лингвист
Записан
SASA
Гость
« Ответ #8 : Август 26, 2009, 11:33 »

Просто укажи кодировку исходников. (у меня Windows-1251).
Код:
int main(int argc, char *argv[])
{
...
QTextCodec::setCodecForTr(QTextCodec::codecForName("Windows-1251"));
...
}
...
  return tr("Процент");
...
Записан
sergeyvl12
Гость
« Ответ #9 : Август 26, 2009, 11:59 »

Просто укажи кодировку исходников. (у меня Windows-1251).

Большое спасибо! Получилось Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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