1

QTranslator動的にリロードしてから、動的に作成されたウィジェットを「静的に添付されたラベル」で再変換したい。

たとえば、静的ラベルも同様です。

QString AutoplanWorkspace::IMPORT = QPushButton::tr("Import");

次に、このラベルを使用して動的にコントロールを作成します。

QPushButton *button1 = new QPushButton(IMPORT)

また、次のような新しいトランスレータをロードします。

  if (myTranslator.load("C:\\tr.qm")) {
    //myTranslator.setParent(parent);
    qApp->installTranslator(&myTranslator);
  }

私が理解できることから、さらにUIをリロードする必要があります:

controls.retranslateUi(this);

しかし、その動的部分と静的プロパティも含まれておらず、Ui::私が理解している限り、自動的に翻訳されることはありません。別のトランスレータを動的にロードして動的部分を翻訳するにはどうすればよいですか?

4

1 に答える 1

2

プッシュ ボタンを含むクラスでは、changeEventをオーバーライドし、QEvent::LanguageChange をキャッチする必要があります。そこでは、a) retranslateUi を呼び出して .ui ファイルからテキストを動的に再翻訳し (既に行っています)、b) 手動で作成されたすべての文字列を再翻訳することもできます (例: button1->setText(tr("Import") を使用)。 you take a look into the retranslateUi function, you will see that the automatically generated ui file does also シンプルに QApplication::translate への呼び出しがデザイナーで設定されたすべてのテキストに対して再度含まれている. .ui ファイルであるため、常に手動で行う必要があります。

于 2014-12-24T11:18:20.917 に答える