Название: Кодировки и статические константы Отправлено: Bojo от Октябрь 10, 2009, 20:11 Есть статическая константа в классе:
const QString ClassName::TestString = tr("тест"); В main задаю кодировки: QTextCodec *cyrillicCodec = QTextCodec::codecForName("Windows-1251"); QTextCodec::setCodecForTr(cyrillicCodec); QTextCodec::setCodecForCStrings(cyrillicCodec); Следующая строчка выявляет, что в ClassName::TestString вместо "тест" абракадабра. Q_ASSERT(ClassName::TestString == QObject::tr("тест")); Подозреваю это потому что статические константы инициализируются еще до вызова main? А что делать с этим? Название: Re: Кодировки и статические константы Отправлено: lit-uriy от Октябрь 10, 2009, 21:51 Попробуй уйти от константы, сделай переменную, которую будешь инициализировать в конструкторе класса.
Название: Re: Кодировки и статические константы Отправлено: Igors от Октябрь 10, 2009, 22:16 Подозреваю это потому что статические константы инициализируются еще до вызова main? А что делать с этим? Подозрения правильные (без разницы статические константы или нет) - если объявлено что-то с инициализацией (не в теле функции) - это будет выполняться до main. Проблема в том что никто не гарантирует порядок инициализации, поэтому лучше написать тупее но надежнее, например void InitGlobals( void ) { static bool theGlobalsReady = false; if (theGlobalsReady) return; theGlobalsReady = true; QTextCodec *cyrillicCodec = QTextCodec::codecForName("Windows-1251"); ClassName::TestString = tr("тест"); ... } Название: Re: Кодировки и статические константы Отправлено: Bojo от Октябрь 11, 2009, 14:06 Все ясно. Но жутко неудобно вместо констант использовать переменные и инициализировать их через присваивание, когда этих констант у меня большие массивы.
Название: Re: Кодировки и статические константы Отправлено: Igors от Октябрь 11, 2009, 20:21 Все ясно. Но жутко неудобно вместо констант использовать переменные и инициализировать их через присваивание, когда этих констант у меня большие массивы. c'est la vie. Я выкручиваюсь объявляя простые структуры (const char * и.т.п) а на старте перегоняю их во что-то "более интеллектуальное".Название: Re: Кодировки и статические константы Отправлено: Bojo от Октябрь 13, 2009, 08:52 А я решил вместо констант теперь колбасить статические методы типа
QString ClassName::GetStringConstantName1() { return tr("Руссо туристо"); } или в случае массива QString GetStringConstantName2(const int& index) { switch (index) { case 0: return tr("Облико морале"); case 1: return tr("Бандито"); default: throw invalid_argument(""); } } Название: Re: Кодировки и статические константы Отправлено: SASA от Октябрь 13, 2009, 17:41 http://www.prog.org.ru/topic_10549_0.html (http://www.prog.org.ru/topic_10549_0.html)
Название: Re: Кодировки и статические константы Отправлено: Bojo от Октябрь 13, 2009, 19:46 http://www.prog.org.ru/topic_10549_0.html (http://www.prog.org.ru/topic_10549_0.html) И чем это поможет? Мне не нужен перевод на другие языки. Мне нужно, чтобы исходный русский язык нормально отображался в приложении, при условии ,что исходники пишутся в указанной кодировке "Windows-1251". |