QT5.6.0 多语言动态切换支持

      网上的一些文章说的不是很清楚,虽然说了installTranslator,但突然来个qApp,不说出来,一时半会都不知道是哪里来的。还有一些没有考虑UI界面的更新,要么就是自己手动去更新。

      既然QT提供了翻译工具可生成.qm文件,也提供了installTranslator这样的函数来实现翻译,那肯定会考虑到UI界面的自动翻译的。

      好了,我来按顺序说下。但是怎么做.qm文件就不具体说了。UI设计器中控件默认是勾选了“可翻译的”,在代码中使用tr(),正如前面 《中文显示支持》那样。.pro中添加TRANSLATIONS += zh_CN.ts,我现在暂只需要英文和中文,英文本来就是,不用翻译的。lupdate更新翻译,生成.ts,在用翻译工具翻译,发布成.qm文件。

     

      我需要中文和英文,设计时有中文按键和英文按键,点击时只要去调用语言切换函数即可。

     1. qApp的来源

      就是在主窗口的构造函数中添加QApplication *app,更新语言时要使用到的,也是网上没有明说的东西。main.cpp中只需要传进来就可以了。

       QApplication a(argc, argv);

    Widget w(&a);


       2. 按键点击事件

void Widget::on_bChinese_clicked()

{
    changeLanguage(CHINESE);
}
 
 
void Widget::on_bEnglish_clicked()
{
    changeLanguage(ENGLISH);
}
    3. 更新
void Widget::changeLanguage(LANGUAGE index)
{
    switch(index) {
    case CHINESE:
        if(trans->load(QString("./zh_CN.qm")) && qapp) {
            qapp ->installTranslator(trans);
            ui->bChinese->setDisabled(true);
            ui->bEnglish->setDisabled(false);
            ui->retranslateUi(ui->layoutWidget);
        }
        break;
    case ENGLISH:
        if(qapp && qapp->removeTranslator(trans)) {
            ui->bChinese->setDisabled(false);
            ui->bEnglish->setDisabled(true);
            ui->retranslateUi(ui->layoutWidget);
        }
    default:
        break;
    }
}
这里使用installTranslator来显示中文,使用removeTranslator来还原。
因为我只有两种语言,代码中写的默认是英文的。同时需要retranslateUi来更新
UI界面的翻译。这个是网上的文章很少有提到的。都是复制粘贴,没有添加自己的东西。

就这么3点,就OK了。
 
 


你可能感兴趣的:(QT5.6.0 多语言动态切换支持)