qt tr () в статической переменной - PullRequest
2 голосов
/ 16 августа 2010

У меня проблема с переводами в 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.

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

Крис.

1 Ответ

3 голосов
/ 16 августа 2010

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

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

...