Qt MultiLanguage应用程序

时间:2018-03-20 12:01:41

标签: c++ qt

基本上,我正在尝试在Qt中创建一个多语言应用程序。为此,我使用hindi.ts cmd终端中的hindi.qmlupdate命令创建了lrelease文件和qt 5.10.0 msvsc(2015)文件。我有一个语言设置小部件,其中我有一个组合框,并根据所选语言,我将该值加载到注册表中。 如下图所示 图1是我的程序的结构 fig2是语言设置的UI

1. Block Diagram of Widgets in my Project

2. Language Gui Page

CODE:

void Form_LanguageSettings::on_pbtn_Submit_clicked()
{
    QSettings settings("HKEY_CURRENT_USER\\MyProject\\Employee", QSettings::NativeFormat);
    settings.setValue("language", ui->cmb_Language->currentText());

}

因此,更新时没有问题。 但是,当我想从Registry将其检索到ListOfDepartment Widget时,我会以这种方式检索它:

QSettings settings("HKEY_CURRENT_USER\\MyProject\\Employee", QSettings::NativeFormat);

QApplication *app;
QString SelectedLanguage;
SelectedLanguage=settings.value("language").toString();
if(SelectedLanguage.toLower() != "english")
{
    if(SelectedLanguage=="hindi")
    {
        QTranslator translation;

        translation.load("C:/MyProject/LanguagePack/ObjectFiles/HindiDevanagari.qm");
        app->installTranslator(&translation);
    }
}

这样我无法加载相应的语言。如果我在main.cpp文件中手动加载特定语言,但是如果我通过我的应用程序中的设置小部件进行加载,则它不起作用。如果要在单独的小部件中完成语言设置,我该如何处理?我是QT多语言的新手。请帮忙吗?

2 个答案:

答案 0 :(得分:1)

尝试使用:

QTranslator* translation = new QTranslator();
translation->load("C:/MyProject/LanguagePack/ObjectFiles/HindiDevanagari.qm");
QApplication::instance()->installTranslator(translation);
//or also QApplication::installTranslator(translation), it is static

在您的代码中,QTranslator实例在if块末尾被销毁,app变量未分配

答案 1 :(得分:0)

可能您应该使用简短的文件名和QDir加载翻译,例如

QTranslator * translation =new QTranslator();
QString dir ("C:/MyProject/LanguagePack/ObjectFiles");
translation->load ("HindiDevanagari", dir);
app->installTranslator (translation);