【发布时间】:2020-08-19 08:11:02
【问题描述】:
我正在尝试更新代码中的语言,如下所示:
LanguageTranslation.h
class LanguageTranslation : public QObject
{
Q_OBJECT
Q_PROPERTY(QString emptyString READ getEmptyString NOTIFY languageChanged)
QTranslator translator;
QQmlEngine *m_engine;
public:
explicit LanguageTranslation();
QString getEmptyString();
enum Language {
ENGLISH,
FRENCH
};
Q_ENUM(Language)
signals:
void languageChanged();
public slots:
void updatelanguage(int lang);
};
LanguageTranslation.cpp
#include "LanguageTranslation.h"
QString LanguageTranslation::getEmptyString()
{
return "";
}
void LanguageTranslation::updatelanguage(int language)
{
switch (language)
{
case ENGLISH :
if(!translator.isEmpty())
qApp->removeTranslator(&translator);
translator.load("Monitor_en_US", ":/translations");
qApp->installTranslator(&translator);
// m_engine->retranslate();
break;
case FRENCH:
translator.load("Monitor_fr_FR", ":/translations");
qApp->installTranslator(&translator);
// m_engine->retranslate();
break;
default:
break;
}
emit languageChanged();
}
Rectangle.qml
Rectangle
{
width: parent.width
height: parent.height * 0.20
color: "red"
Text {
width: parent.width
text: qsTrId("abcId")+ LanguageTranslation.emptyString
}
}
此文本:qsTrId("abcId") 仅在我使用时更新
text: qsTrId("abcId") + LanguageTranslation.emptyString
除了追加emptyString之外,还有其他方法可以更新语言吗? 我不想使用 emptyString 来更新语言。此外,当我使用 retranslate() 时,我的应用程序崩溃了。
【问题讨论】:
-
你看过这篇文章了吗? stackoverflow.com/questions/47351298/…
-
你为什么取消注释
m_engine->retranslate(),你需要这样做让引擎知道加载了新语言 -
在我的代码中使用 m_engine->retranslate() 会导致我的应用程序崩溃。是因为我在 main.cpp 中使用 QQmlApplicationEngine applicationEngine 吗??
-
强烈建议不要将自定义组件命名为系统组件。