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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QString: cтатические элементы классов не конвертируются tr()  (Прочитано 5371 раз)
fear
Гость
« : Ноябрь 02, 2006, 19:10 »

В приведённом ниже примере статический массив mess типа QString инициализируется значениями до загрузки текстового кодека, в результате чего на экран вместо русского текста выводится какая-то лабуда.
Кто-нибуть сталкивался с подобной проблемой? Как её можно решить?

Код:
#include "aaa.h"

int main(int argc, char *argv[])
{
  ...

  QTextCodec *codec = QTextCodec::codecForName("utf8");
  QTextCodec::setCodecForTr(codec);

  ...
  <вывод содержимого AAA::mess на экран>
  ...
}


Файл aaa.h

Код:
class AAA
{
   ...
   static const QString mess[];
   ...
};



Файл aaa.cpp

Код:
  ...
  const QString AAA::mess[] = {QObject::tr("Вася"), QObject::tr("Петя"), QObject::tr("Стёпа")};
  ...
Записан
SLK
Гость
« Ответ #1 : Ноябрь 02, 2006, 19:22 »

добавь QTextCodec::setCodecForCStrings(сodec);
Записан
Dendy
Гость
« Ответ #2 : Ноябрь 03, 2006, 01:12 »

Ну дак, а как иначе... Кто кроме тебя знает что и когда в какую строку запихнуть? Естественно, статические членьІ инициализируются первьІми и чесно запишут билибердень в переменньІе (ибо никто не знает какие кодеки использовать для кирилицьІ).

Создай метод, которьІй будет инициализировать статические переменньІе и вьІзьІвай его после загрузки кодеков.
Записан
Вудруф
Гость
« Ответ #3 : Ноябрь 03, 2006, 07:50 »

Да и то это сработает только при условии, если они не будут константными (const_cast в расчёт не берём как "некрасивый").
Записан
burkav84
Гость
« Ответ #4 : Ноябрь 08, 2006, 22:37 »

Попробуй:
1. Исходник в котором содержится QObject::tr конверти в UTF-8
2. Применяй вместо QObject::tr Object::trUtf8

добавлено спустя 1 минуту:

 
Цитировать

2. Применяй вместо QObject::tr Object::trUtf8


Пропустил Q:
2. Применяй вместо QObject::tr   QObject::trUtf8
Записан
Alex03
Гость
« Ответ #5 : Ноябрь 09, 2006, 07:50 »

Примеры из хелпа 3.3.6

Код:

Example of QT_TR_NOOP():
    QString FriendlyConversation::greeting( int greet_type )
    {
        static const char* greeting_strings[] = {
            QT_TR_NOOP( "Hello" ),
            QT_TR_NOOP( "Goodbye" )
        };
        return tr( greeting_strings[greet_type] );
    }

Example of QT_TRANSLATE_NOOP():
    static const char* greeting_strings[] = {
        QT_TRANSLATE_NOOP( "FriendlyConversation", "Hello" ),
        QT_TRANSLATE_NOOP( "FriendlyConversation", "Goodbye" )
    };

    QString FriendlyConversation::greeting( int greet_type )
    {
        return tr( greeting_strings[greet_type] );
    }

    QString global_greeting( int greet_type )
    {
        return qApp->translate( "FriendlyConversation",
                                greeting_strings[greet_type] );
    }
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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