[英]QT application with dinamic language (QTranslator) does not work
I have a QT application and I need to change language at runtime. 我有一个QT应用程序,需要在运行时更改语言。 I am using QTranslator and .qm files.
我正在使用QTranslator和.qm文件。 The language is loaded properly but my widgets don't show the text.
语言已正确加载,但我的窗口小部件未显示文本。
Y have 'MyClass..cpp' (inherits QMainWindow): Y具有“ MyClass..cpp”(继承QMainWindow):
MyClass::MyClass()
{
...
selectLanguage("en");
m_pLabel = new QLabel(tr("User"));
m_pLabel->show();
...
}
void MyClass::selectLanguage(QString language) {
QString sTranslationFile = QString("texts_%1").arg(language);
QTranslator translator;
//translator.load(":/translations/" + sTranslationFile);
translator.load(sTranslationFile, ":/translations/");
if (qApp->installTranslator(&translator))
qDebug() << "Ok";
}
void MyClass::changeEvent(QEvent *pEvent)
{
if(pEvent)
{
switch(pEvent->type())
{
case QEvent::LanguageChange:
retranslate();
break;
}
}
QMainWindow::changeEvent(pEvent);
}
void MyClass::retranslate()
{
qDebug() << "retranslate";
if (m_pLabel)
m_pLabel->setText(tr("User"));
}
In 'myProject.pro': 在“ myProject.pro”中:
...
QMAKE_POST_LINK = lrelease.exe myProject.pro
...
RESOURCES += \
resources/resources.qrc
TRANSLATIONS += resources/translations/texts_en.ts \
resources/translations/texts_es.ts
...
DISTFILES += \
...
resources/translations/texts_en.qm \
resources/translations/texts_es.qm
In 'resources.qrc': 在“ resources.qrc”中:
...
translations/texts_en.qm
translations/texts_es.qm
In 'texts_en.ts': 在“ texts_en.ts”中:
<!DOCTYPE TS><TS>
<context>
<name>MyClass</name>
<message>
<source>User</source>
<translation>UserEn</translation>
</message>
<message>
<source>Group</source>
<translation>GroupEn</translation>
</message>
</context>
</TS>
Language is loaded ("Ok" appears) and "retranslate" is called, but the label does NOT show "UserEn", but "User"... 语言已加载(出现“ Ok”)并调用了“ retranslate”,但标签未显示“ UserEn”,但显示了“ User”。
I call 'selectLanguage("es")' after a while, but the same... 过一会儿我叫“ selectLanguage(“ es”)',但是一样。
Maybe error is that you create translator on the stack.
也许错误是您在堆栈上创建了转换器 。 You must create
translator on the heap.
您必须在堆上创建翻译器 。 Something like that.
这样的事情。 MyClass.h:
MyClass.h:
class MyClass
{
private:
QScopedPointer<QTranslator> mTranslator;
...
};
MyClass.cpp: MyClass.cpp:
MyClass::MyClass()
: mTranslator(new QTranslator())
{
...
selectLanguage("en");
m_pLabel = new QLabel(tr("User"));
m_pLabel->show();
...
}
void MyClass::selectLanguage(QString language) {
QString sTranslationFile = QString("texts_%1").arg(language);
mTranslator->load(sTranslationFile, ":/translations/");
if (qApp->installTranslator(&translator))
qDebug() << "Ok";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.