vs2015 使用Qt语言家及其使用过程中遇到的问题

1.首先点击Qt VS Tools中的 create new translator file如下所示:
这里写图片描述
2.然后更改Filename的名字,比如release_zh.ts,这是中文的,release_en.ts,这是英文的
这里写图片描述
3.
(1)在代码中加载上面两个.ts文件
我这个demo中是用了一个comboBox实现的中英文切换,也即使ui.comboBox。这是绑定信号槽

connect(ui.comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(changeLang(int)));

(2)这是对应的槽函数

void QtGuiApplication1::changeLang(int index)
{
    QString langCode = ui.comboBox->itemData(index).toString();
    // 根据index加载不同的语言
    changeTr(langCode);
    // 刷新label
    refreshLabel();
}

(3)根据index加载不同的语言

void QtGuiApplication1::changeTr(const QString& langCode)
{
    static QTranslator* translator;

    if (translator != NULL)
    {
        qApp->removeTranslator(translator);
        delete translator;
        translator = NULL;
    }
    translator = new QTranslator;
    // 中文
    if (langCode == "zh")
    {
        if (translator->load("release_zh.qm"))
        {
            qApp->installTranslator(translator);
        }
    }
    // 英文
    else if (langCode == "en")
    {
        if (translator->load("release_en.qm"))
        {
            qApp->installTranslator(translator);
        }
    }

}

(4)刷新label

void QtGuiApplication1::refreshLabel()
{
    ui.label->setText(tr("china"));
}

**小结:**ui.label->setText(tr(“china”)); 这句代码的意思就是在Qt语言家中设置一个对应的“标签”,如下所示:
这里写图片描述
注意:每次更改setText中tr的内容时,都要进行更新,方法如下:右键点击你的项目,然后选择Iupdate All .ts Files in project,这是对.ts文件进行更新,必须执行的。要不不会更新的。
4.点击Qt VS Tools中的Launch Qt Linguist,然后打开自己的.ts文件,如下所示:
这里写图片描述
5.然后在刚才我们设置的settext所对应的china,把中文和英文都填写上,然后进行保存。
6.最后右键点击你们自己的工程选择Irelease All .ts File in Project,这步是生成.qm,是我们在项目中加载所需要的,不点击不会进行更新的哦!

这里写图片描述
7.实现界面:
这里写图片描述

二、下面说下我遇到的问题
因为我们在代码中的label(或者其他的)进行设置settext,正常在Qt的语言家中是可以找到tr中包裹过的内容的。但是我之前遇到过是不管怎么修改就是得不到tr中的内容:
原因是在建立release_zh.ts和release_en.ts这两个ts文件之前,我当时为了测试我又建立了test_zh.ts和test_en.ts文件,然后在vs会自动加载后面的两个ts文件,所有不管你怎么修改之前的ts文件都是没有用的。

解决办法:你可以在更新ts文件时,也就是点击Iupdate All .ts Files in Project,在输出窗口中看看你具体加载的是什么ts文件。然后用软件(比如notepad++)打开你项目中的.vcxproj,找到你输出窗口中加载的ts文件,如:
这里写图片描述
看看你要加载的ts文件是否存在,若是不存在就在加上,然后保存,就可以正常的加载你想要的ts文件,问题就可以解决啦!!!

猜你喜欢

转载自blog.csdn.net/seekn/article/details/81101359
今日推荐