私はQMainWindow
と複数のQtクラスとQt以外のクラスで構成されるQtプロジェクトに取り組んでいます。それらの多くはQt Linguistで翻訳されたtr()
のQStringsを使用しています。言語の変更(QTranslator
のロード&のインストール/ QTranslator
のロード&の削除)は、アプリケーションのメニューのQActionsによってトリガーされます。メニューからアプリケーション内のすべてのウィジェットを動的に再変換する方法はありますか?
私はthe official Qt documentation concerning dynamic translationを読んでいると、それは基本的に以下の過負荷を示唆:
void MainWindow::changeEvent(QEvent *event)
{
if (event->type() == QEvent::LanguageChange) {
titleLabel->setText(tr("Document Title"));
... // all my tr() QStrings here
okPushButton->setText(tr("&OK"));
} else
QWidget::changeEvent(event);
}
私が直面しています問題は、変換するQStringsは(単独QMainWindow
58)多くあるということです、そしていくつかは、実行時に満たされています同様に、ユーザインタラクションを通じて、 e。 g。 myFunction(a,b)
は、以下のQPushButton
を通じて呼び出されます。
void MainWindow::myFunction(MyClassA a, MyClassB b)
{
...
if(b.myCondition() == 0)
{
...
// below is the problem
myLabel->setText(myLabel->text() + QString("\n" + a->getName() + tr(" gagne ") + exp + tr(" points d'expérience")));
}
else
{
myLabel->setText(QString(tr("something else")));
}
...
}
だから私はほとんど私が上記changeEvent()
方法でQString
のこのタイプを含めることができる方法を見ていません。 MainWindow
以外のクラスについては、QStringsも翻訳されますが、QWidget
ではありません(したがって、changeEvent
のオーバーロードはありません)。
私は、UIのフォームで、この方法を使用する別の方法があることを読みました:
void MainWindow::changeEvent(QEvent* event)
{
if (event->type() == QEvent::LanguageChange)
{
ui.retranslateUi(this);
}
...
}
しかし、これは私が(私はやっていないのです私のプロジェクト内のすべてのウィジェットをUIのフォームを使用していますことを必要としますコードで作成されます)。 私はUIの形で私のメインウィンドウを輸出しようとしたが、私はプロジェクトに生成されたヘッダを含めるようにしようとすると、私は次のエラーを取得する:
ui_fenetreprincipale.h:32: error: qmainwindowlayout.h: No such file or directory
は、最善の方法を選択するための任意の提案を事前によっていただきありがとうございます私のアプリケーションを翻訳する。
これは実際にQt Designerで生成されたコードの動作です。関数名は異なっていますが( 'retranslateUi')、同じことをします。 –