1

QQuickView を使用して、ウィジェット アプリケーションで qml インターフェイスを表示します

  m_window = new QQuickView();
  m_container = QWidget::createWindowContainer(m_window,hostWidget,Qt::FramelessWindowHint);
  m_container->setFocusPolicy(Qt::TabFocus);
  m_window->setResizeMode(QQuickView::SizeRootObjectToView);
  m_window->setSource(file_url);

qml インターフェイスを多言語にする必要があるため、QQuickView をインスタンス化する前に、新しいトランスレーターをアプリケーションにインストールします。

  m_qmlTranslator = new QTranslator(this); // this - host QWidget    
  m_qmlTranslator->load(QString::fromUtf8("translate_%1").arg(QLocale::system().name()),strTranslationDir);
  QScopedPointer<QCoreApplication> pAppl(QApplication::instance());
  pAppl->installTranslator(m_qmlTranslator);

load関数とinstallTranslator関数の両方が true を返します。(ターゲット言語の翻訳は ts ファイルに存在し、右のディレクトリに配置された qm ファイルにコンパイルされます)

問題は、C++ の翻訳がうまく機能することです。次のコードはターゲット言語で文字列を出力します。

   qDebug() << tr("translation test");

しかし、QQuickView文字列によって表示されるqmlインターフェースでは、翻訳されていないままです

Text {
    id: title
    text: qsTr("translation test")
    font.pixelSize: 36
    font.bold: true
    anchors.horizontalCenter: parent.horizontalCenter
}

デバッグ中に、正しいsourceText変数を使用してQCoreApplication::translate関数が Qt によって呼び出されることがわかりましたが、からのすべての QTranslatorsは null QStringsを返すため、表示されるテキストは翻訳されません。qsTr("translation test")self->d_func()->translators

なぜこれが起こるのか、QQuickViewでテキストを翻訳する方法はありますか?

4

1 に答える 1