2010-08-16 5 views
2

J'ai un problème concernant les traductions en qt. Toutes les traductions dans mon porjet fonctionnent bien, mais une, qui est dans une variable statique d'une classe. partie correspondante du Code se présente comme suitqt tr() dans la variable statique

Le fichier d'en-tête est semblable à ceci:

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 

} 

et dans le fichier de mise en œuvre, j'initialiser la variable comme suit:

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

Et tout ce que je fais (essayer avec QT_TR_NOOP, alors tr() et d'autres) je ne peux pas traduire myClassInfo.problematicString. La chose la plus étrange est que le texte "quelque chose à traduire" apparaît dans le fichier * .ts.

Si quelqu'un a des indices, s'il vous plaît partagez-les avec moi. Merci d'avance.

Chris.

+0

Question similaire ici: http://stackoverflow.com/questions/1486492/qt-tr-does-not-seem-to-work-on-static-constant-members – sje397

Répondre

3

Les variables statiques sont instanciées (et donc, le code du constructeur s'exécute) avant l'exécution de la fonction int main. Le code de traduction est mis en place dans le constructeur QApplication (je crois), qui n'est pas exécuté tant que votre fonction int main n'a pas été entrée. Ainsi, vous essayez d'obtenir la traduction d'une chaîne avant que le code pour la prendre en charge ait été initialisé. Pour éviter cela, vous pouvez accepter que la chaîne donnée ne soit pas traduite et la traduire explicitement chaque fois qu'elle est utilisée, ou utiliser le Construct on First Use idiom au lieu d'une variable membre statique.

+0

Merci beaucoup et j'apprécie le lien à la référence appropriée. Oui, je dois changer de source ensuite. Bonne chance, Chris. – Krzysztow

+0

Le lien vers la FAQ C++ était obsolète. J'ai cherché l'article et changé le lien. –