qt tr() в статической переменной

У меня проблема с переводами в qt. Все переводы в моем проекте работают нормально, кроме одного, который находится в статической переменной класса. Соответствующая часть кода выглядит следующим образом

Заголовочный файл похож на этот:

typedef struct {
    int         type;
    QString     problematicString;
} info;

MyClass::QObject_Descendant
{
Q_OBJECT;

//some functions like constructor, destructor... etc.
....

static info myClassInfo;//class that makes problems

}

и в файле реализации я инициализирую переменную следующим образом:

info MyClass::myClassInfo={
    1,
    tr("something to be translated")
};

И что бы я ни делал (пытаясь использовать QT_TR_NOOP, затем tr() и другие), я не могу перевести myClassInfo.problematicString. Самое странное, что в *.ts файле появляется текст "что-то нужно перевести".

Если у кого-то есть какие-то подсказки, пожалуйста, поделитесь ими со мной. Заранее спасибо.

Крис.


person Krzysztow    schedule 16.08.2010    source источник
comment
Аналогичный вопрос здесь: stackoverflow.com/questions/1486492/   -  person sje397    schedule 16.08.2010


Ответы (1)


Статические переменные создаются (и, следовательно, запускается код конструктора) до запуска вашей функции int main. Код перевода устанавливается в конструкторе QApplication (я полагаю), который не запускается до тех пор, пока не будет введена ваша функция int main. Таким образом, вы пытаетесь получить перевод строки до того, как код, поддерживающий ее, будет инициализирован.

Чтобы избежать этого, вы можете либо признать, что данная строка не переведена, и явно переводить ее каждый раз, когда она используется, либо использовать Идиома построения при первом использовании вместо статической переменной-члена.

person Caleb Huitt - cjhuitt    schedule 16.08.2010
comment
Большое спасибо, и я ценю ссылку на соответствующую ссылку. Да, тогда я должен изменить свой источник. Всего наилучшего, Крис. - person Krzysztow; 17.08.2010
comment
Ссылка на FAQ по C++ устарела. Я искал статью и изменил ссылку. - person Martin Hennings; 28.08.2013