如何在Qt的对飞语翻译(How to translate language in Qt on the

2019-06-23 18:07发布

我使用的翻译和语言学家在我的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

我必须调用无效的MainWindow :: changeEvent中(QEvent的*事件)设置新的语言时,

这是我在主窗口已经宣布从这里我打电话setLanguage()我changeEvent中()方法;

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();
}

Answer 1:

你给我的链接指出:

但是,其基本原理是在有需要注意的动态语言的变化每个部件覆盖了QWidget :: changeEvent中()。

这是必需的作为installTranslator()将创建将被发送到每一个微件的变化的事件。 这意味着,如果你希望你的主窗口被重新翻译,你必须做的:

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()调用它创建了一个LanguageChange事件,然后将其夹在主窗口LanguageTranslator :: loadTranslation()这就要求的QApplication :: installTranslator():: changeEvent中



文章来源: How to translate language in Qt on the fly
标签: qt qt4 symbian