Qt切换语言的方法(传统数组法与Qt语言家)

传统数组法:

定义一个字符串二维数组,

QString weekStr[2][7] = {"星期一","星期二","星期三","星期四","星期五","星期六","星期日",\
                         "Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};

接下来做一个最简单的combox,上下拉切换中英文就好了

void MainWindow::on_comboBox_currentIndexChanged(int index)
{
    static int lastindex = 0;
    if(index == lastindex)
    {
        return;
    }
    lastindex = index;
    QList<QLabel *> lbs = this->findChildren<QLabel *>();
    int i_cnt = 0;
    foreach (QLabel *lb, lbs) {
        lb->setText(tr("%1").arg(weekStr[index][i_cnt++]));
    }
    for(int i = 0;i<2;i++)
    {
        ui->comboBox->setItemText(i,language[index][i]);
    }
}

接下来就可以看到效果

但是这只是在你字体少的情况,如果你字体很多,你就可以使用qt自带的语言家

具体操作如下:

  • 对用户可见的文本信息全部使用tr()进行封装。

  • 在pro中添加:

  • TRANSLATIONS += ts_zh.ts  ts_en.ts

此时你只需要在界面ui写好控件名

如:

然后选择:工具->外部->Qt语言家->更新翻译,则会生成对应的ts文件

  • 翻译:使用Qt Linguist打开要翻译的ts文件,对翻译源进行相应语言的翻译。

将这些英文翻译输入后,点击问号

然后保存->发布即可

在qt的语言家刚才更新翻译,现在选发布翻译

此时你肯定已经有了两个qm文件,将其添加到资源文件

在combox里添加:

void MainWindow::on_comboBox_currentIndexChanged(int index)
{
    static int lastIndex = 0;
    if(index == lastIndex)
        return;
    lastIndex = index;
    static  QTranslator*  translator;
            if  (translator  !=  NULL){
                qApp->removeTranslator(translator);
            delete  translator;
                translator  =  NULL;
        }
        translator  =  new  QTranslator;
        if(index==0){
            if(translator->load(":/tr_zh.qm")){
                qApp->installTranslator(translator);
            }
        }else{
            if(translator->load(":/tr_en.qm")){
                qApp->installTranslator(translator);
            }
        }
        ui->label->setText(tr("星期一"));
        ui->label_2->setText(tr("星期二"));
        ui->label_3->setText(tr("星期三"));
        ui->label_4->setText(tr("星期四"));
        ui->label_5->setText(tr("星期五"));
        ui->label_6->setText(tr("星期六"));
        ui->label_7->setText(tr("星期日"));
        ui->comboBox->setItemText(0,tr("中文"));
        ui->comboBox->setItemText(1,tr("英文"));
}

切记,更新了翻译一定要重新settext或者刷新ui,不然不会生效

此生成的文件就可以中英文动态切换显示

如果不需要动态切换,那么你只需要

就只在初始的时候生效了

猜你喜欢

转载自blog.csdn.net/qq_41399894/article/details/88046868