我使用 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
}
在调试时,我发现Qt使用正确的sourceTextQCoreApplication::translate
变量调用该函数,但所有 QTranslators 都返回 null QStrings,因此可见文本保持未翻译。qsTr("translation test")
self->d_func()->translators
有什么想法为什么会发生这种情况以及如何在 QQuickView 中翻译文本?