问题描述
我正尝试更新代码中的语言,如下所示:
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()时,我的应用程序崩溃了。
解决方法
我使用retranslate()获得了updateLanguage的解决方案,如下所示:
void LanguageTranslation::upDateLanguage(int language)
{
switch (language)
{
case ENGLISH :
m_translator.load("Language_en_US",":/translations");
break;
case FRENCH:
m_translator.load("Language_fr_FR",":/translations");
break;
default:
break;
}
qApp->installTranslator(&m_translator);
m_engine->retranslate();
emit languageChanged();
}