gpt4 book ai didi

qt - 如何在 Qt 中即时翻译语言

转载 作者:行者123 更新时间:2023-12-04 22:49:38 24 4
gpt4 key购买 nike

我正在使用 Translator 和 linguist 在 Qt symbain 中翻译我的应用程序中的语言,但我想即时(在运行时)执行此操作,我已经尝试了开发人员网络提供的解决方案,但它对我不起作用

 #include "languagetranslator.h"
#include "constants.h"
#include <QSettings>
#include <HelperClasses/Strings.h>
#include <QTranslator>
#include <AppStatus/appstatus.h>
#include <QApplication>

QTranslator* LanguageTranslator::current = 0;

LanguageTranslator::LanguageTranslator(int& argc, char* argv[]) : QApplication(argc, argv)
{

}


LanguageTranslator::~LanguageTranslator()
{
}

void LanguageTranslator::loadTranslation()
{
QString language;
language = AppStatus::getCurrentLanguage();
loadTranslation(language);
qDebug("language from laodtranslation = %s",language.toLatin1().data());
//qDebug(language.toLatin1());
}

void LanguageTranslator::loadTranslation(QString language)
{
//QApplication app;
QTranslator* translator = new QTranslator(instance());
translator->load(language);
installTranslator(&translator);

//exec();

}

它仅在我在 main.cpp 中声明它并重新启动应用程序时才有效,我也在选择新语言后调用此方法是否有任何我遗漏的东西。我正在关注以下链接 http://www.qtcentre.org/wiki/index.php?title=Dynamic_translation_in_Qt4_applications

设置新语言时是否必须调用 void MainWindow::changeEvent(QEvent *event)

这是我在 mainWindow 中声明的 changeEvent() 方法,我从这里调用 setLanguage();
void MainWindow::changeEvent(QEvent *event)
{
if(event->type() == QEvent::LanguageChange)
{
ui->retranslateUi(this);
// retranslate();
setLanguage();
}
QMainWindow::changeEvent(event);
}



void MainWindow::setLanguage()
{
QString myLanguage;
int iIndex = AppStatus::getSettingsData().at(3);
switch(iIndex)
{
case ENGLISH:
myLanguage = "language_en";
break;
case SPANISH:
myLanguage = "language_es";
break;
}
AppStatus::saveCurrentLanguage(myLanguage);

LanguageTranslator::loadTranslation(myLanguage);
}

从 setLangauge() 我调用 languageTranslator()
有什么我遗漏的吗?
这是我的主课
int main(int argc, char *argv[])
{

LanguageTranslator app(argc, argv);
QString lang = AppStatus::getCurrentLanguage();
app.installTranslator(&translator);
MainWindow mainWindow;
mainWindow.setOrientation(MainWindow::ScreenOrientationLockPortrait);

//About mainWindow;

#if defined(Q_OS_SYMBIAN)
mainWindow.showMaximized();
#else
mainWindow.show();

#endif

// mainWindow.showFullScreen();
app.connect(&app,SIGNAL(lastWindowClosed()),&app,SLOT(quit()));
return app.exec();
}

最佳答案

您提供的链接指出:

However, the basic principle is to override QWidget::changeEvent() in every widget which has to be aware of dynamic language changes.



这是必需的,因为 installTranslator() 将创建一个更改事件,该事件将发送到每个小部件。
这意味着,如果您希望重新翻译 MainWindow,则必须执行以下操作:
void MainWindow::changeEvent(QEvent* event)
{
if (event->type() == QEvent::LanguageChange)
{
// retranslate designer form (single inheritance approach)
ui.retranslateUi(this);
}

// remember to call base class implementation
QMainWindow::changeEvent(event);
}

您必须为每个具有可翻译 GUI 的小部件执行此操作

[编辑 - 添加评论,因为它是问题的实际答案]

不要在 changeEvent() 中调用 setLanguage()!您应该从可以更改语言的任何地方调用 setLanguage()。 setLanguage() 调用 LanguageTranslator::loadTranslation() 调用 QApplication::installTranslator() 创建一个 LanguageChange 事件,然后在 MainWindow::changeEvent 中捕获

关于qt - 如何在 Qt 中即时翻译语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10224101/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com