如果要实现qt程序动态语言切换,最简单有效的方法是使用QTranslator类,首先使用QTranslator对象加载相应的翻译语言文件,然后用 QApplication::installTranslator 为程序装载翻译器,后续如果想更改语言,将旧的翻译器移除,添加新的加载相应语言文件的翻译器即可。
我在刚开始写动态语言切换程序的时候,使用connect函数连接信号槽
connect (combox, SIGNAL(currentIndexChanged(int)),this, SLOT(languageCBoxChanged()));
Combox中存放的是不同的语言标签,可以通过combox中选项来选择不同语言,当combox中的选项发生变化时会产生currentIndexChanged(int)信号,然后调用与该信号关联的languageCBoxChanged()槽函数,在槽函数中,我进行了translator的替换。
void Widget::languageCBoxChanged()
{
translator = new QTranslator(qApp);
switch(combox->currentIndex())
{
case 0:
qApp->removeTranslator(translator);
qDebug() << "Chinese";
translator->load(":/ipcfg.qm");
qDebug() << "right";
break;
case 1:
qApp->removeTranslator(translator);
qDebug() << "English";
translator->load(":/ipcfg_english.qm");
qDebug() << "right";
break;
case 2:
qApp->removeTranslator(translator);
qDebug() << "Korean";
translator->load(":/ipcfg_ko.qm");
qDebug() << "right";
break;
}
qApp->installTranslator(translator);
this->retranslate();
}
在上面的函数中,在我替了translator之前,已经绘制好的窗体中与语言相关的控件已经装载了旧的translator加载的翻译文件,替换之后,要想使新的翻译文件在旧的窗体中与语言相关的控件上生效,