2

qtでの翻訳に問題があります。私のプロジェクトのすべての翻訳は正常に機能しますが、1つはクラスの静的変数にあります。コードの対応する部分は次のようになります

ヘッダーファイルは次のようになります。

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ファイルに表示されることです。

誰かが何かヒントがあれば、私と共有してください。前もって感謝します。

クリス。

4

1 に答える 1

3

int main静的変数は、関数が実行される前にインスタンス化されます(したがって、コンストラクターコードが実行されます) 。QApplication翻訳コードはコンストラクター(私は信じています)で設定され、int main関数が入力されるまで実行されません。したがって、文字列をサポートするコードが初期化される前に、文字列の翻訳を取得しようとしています。

これを回避するには、指定された文字列が変換されないことを受け入れて、使用するたびに明示的に変換するか、静的メンバー変数の代わりに「最初に使用するときの構成」イディオムを使用します。

于 2010-08-16T19:56:47.400 に答える