2010-08-16 3 views
2

qt의 번역과 관련하여 문제가 있습니다. 내 porject의 모든 번역은 정상적으로 작동하지만 하나는 클래스의 정적 변수에 있습니다.정적 변수의 qt tr()

헤더 파일은 다음과 유사합니다 다음과 같이 코드의 해당 부분은 같습니다

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 파일에 나타납니다.

누군가 힌트가 있으면 나와 공유하십시오. 미리 감사드립니다.

Chris.

+0

비슷한 질문은 여기 http://stackoverflow.com/questions/1486492/qt-tr-does-not-seem-to-work-on-static-constant-members – sje397

답변

3

int main 함수가 실행되기 전에 정적 변수가 인스턴스화 (및 생성자 코드 실행)됩니다. 번역 코드는 int main 함수가 입력 될 때까지 실행되지 않는 QApplication 생성자 (나는 생각합니다)에서 설정됩니다. 따라서 문자열을 지원하는 코드가 초기화되기 전에 문자열의 번역을 얻으려고합니다.

이 문제를 방지하려면 지정된 문자열이 변환되지 않고 사용 될 때마다 명시 적으로 변환하거나 정적 멤버 변수 대신 Construct on First Use idiom을 사용할 수 있습니다.

+0

고맙습니다. 링크를 부탁드립니다. 적절한 참조. 예, 소스를 변경해야합니다. 모두 최고입니다. Chris. – Krzysztow

+0

C++ FAQ에 대한 링크가 구식입니다. 기사를 검색하고 링크를 변경했습니다. –

관련 문제