Qt学习笔记:多语言文件.qm的生成和使用

环境

系统:Windows10 64位 家庭版
Qt版本:5.6.0 msvc2013 32位
编译器:Visual Studio 2013 专业版

目的

在Qt程序中生成多语言处理所必需的.qm文件,然后添加到工程中并在程序中使用。

示例步骤

1.新建一个Qt Widgets工程,这里我取名为Linguist,并添加一个名为LinguistWidget的类,如下图所示:
在这里插入图片描述2.在LinguistWidget中添加一个QPushButton,用来切换语言和显示,关键代码如下所示:
LinguistWidget.h文件

#ifndef LINGUISTWIDGET_H
#define LINGUISTWIDGET_H

#include <QWidget>

class QPushButton;

class LinguistWidget : public QWidget
{
    Q_OBJECT

public:
    LinguistWidget(QWidget *parent = 0);
    ~LinguistWidget();

protected:
    void retranslateUi();

private:
    QPushButton* m_pBtnChangeLanguage = Q_NULLPTR;
};

#endif // LINGUISTWIDGET_H

LinguistWidget.cpp文件

#include "LinguistWidget.h"

#include <QPushButton>

LinguistWidget::LinguistWidget(QWidget *parent)
    : QWidget(parent)
{
    m_pBtnChangeLanguage = new QPushButton(this);

    retranslateUi();
}

LinguistWidget::~LinguistWidget()
{

}

void LinguistWidget::retranslateUi()
{
    m_pBtnChangeLanguage->setText(tr("Change Language"));   //这里要用tr包起来,不然语言家无法识别
}

3.在工程目录下新建一个文件夹名叫language(这些名字随便取,但是要和下面的宏一致),用来存放ts文件,如下图所示:
在这里插入图片描述4.在.pro文件中,添加宏:

TRANSLATIONS += language/langEnglish.ts \
                language/langChinese.ts

然后执行qmake,再执行Qt Creator菜单栏中的"工具—>外部—>Qt语言家—>更新翻译(update)“完成后,工程目录下的language文件夹里会有两个文件,分别是langChinese.ts和langEnglish.ts,如下图所示:
在这里插入图片描述5.在开始菜单中打开如下图所示的Linguist程序:
在这里插入图片描述
6.在Liguist程序中打开步骤2生成的langChinese.ts和langEnglish.ts文件,在打开文件时会弹出语言设置窗口,在窗口中为相应的文件选择相应的目标语言,如下两图所示,然后选择OK:
在这里插入图片描述在这里插入图片描述
7.在弹出的语言翻译界面中,为中文添加适当的翻译(因为源语言就是英文,所以英文这里不做翻译),如下图所示:在这里插入图片描述8.再执行菜单栏中的"文件—>发布全部”,此时在工程目录下的language文件夹下会生成两个文件:langChinese.qm和langEnglish.qm文件,这就是Qt工程最终用的翻译文件,如下图所示:
在这里插入图片描述9.回到Qt工程,添加一个资源文件,这里我取名为Resource,然后添加一个前缀"/",再把步骤8生成的两个.qm文件添加进来,如下图所示:
在这里插入图片描述注意:添加完成后要执行一次qmake,否则会导致资源文件无法识别和加载的现象。
10.为步骤2中添加的QPushButton添加一个槽函数,用来切换语言,关键代码如下:

    connect(m_pBtnChangeLanguage, &QPushButton::clicked, this, [=]{
        m_bDisplayChinese = !m_bDisplayChinese;
        if (m_bDisplayChinese)
        {
            m_pTranslator->load(":/language/langChinese.qm");
        } else {
            m_pTranslator->load(":/language/langEnglish.qm");
        }
        qApp->installTranslator(m_pTranslator);

        retranslateUi();
    });

11.界面一开始如下图:
在这里插入图片描述
单击一下按键变成:
在这里插入图片描述

分析:.qm文件放在资源文件中加载和在程序外部加载优劣分析

在资源文件中加载(个人偏向这个):
优点:

  • 在程序发布时不用把最新的.qm文件拷贝到加载路径中,降低了修改翻译时界面没有翻译或翻译不准确的风险;
  • 不会把翻译的信息暴露给用户;

缺点:

  • 资源文件会编译时可执行程序,所以会导致可执行程序的体积变大(但是.qm文件一般很小,这个缺点可以忽略不计);
  • 当只修改翻译不修改源码时也必须重新编译可执行程序。

在程序外部加载:
优点:

  • 当只修改翻译不修改源码时不用重新编译可执行程序,只要替换修改后的.qm文件;
  • 不会影响可执行程序的大小;

缺点:

  • 程序发布时,要把最新.qm文件中复制到相应加载路径下(在实际开发中经常会忘了这个步骤),导致没有翻译或翻译不准确;
  • 把翻译信息暴露给用户,可能会被用户修改(不可抗因素,可以忽略)。

示例源码

  • 8
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
QT生成.so和.o文件一般有两种方式: 1. 使用QT Creator集成开发环境 在QT Creator中,可以通过在.pro文件中添加对应的库文件及其源代码,然后使用QT Creator自带的构建工具来编译生成.so和.o文件。具体步骤如下: - 在.pro文件中添加需要编译的源文件和库文件,示例代码如下: ``` SOURCES += \ main.cpp \ mylib.cpp HEADERS += \ mylib.h LIBS += -L/path/to/lib -lmylib ``` 其中,mylib.cpp和mylib.h为库文件的源代码,/path/to/lib为库文件的路径,-lmylib为库文件的名称。 - 使用QT Creator的构建工具生成.so和.o文件,具体步骤如下: 点击QT Creator界面上方的“构建”按钮,或者使用快捷键“Ctrl + B”进行构建。构建完成后,在项目文件夹下的release或debug文件夹中可以找到生成的.so和.o文件。 2. 使用qmake命令行工具 另一种方式是使用qmake命令行工具来生成.so和.o文件。具体步骤如下: - 在.pro文件中添加需要编译的源文件和库文件,示例代码如下: ``` SOURCES += \ main.cpp \ mylib.cpp HEADERS += \ mylib.h LIBS += -L/path/to/lib -lmylib ``` 其中,mylib.cpp和mylib.h为库文件的源代码,/path/to/lib为库文件的路径,-lmylib为库文件的名称。 - 使用qmake命令生成Makefile文件,具体命令如下: ``` qmake -makefile ``` - 使用make命令编译生成.so和.o文件,具体命令如下: ``` make ``` 编译完成后,在项目文件夹下的release或debug文件夹中可以找到生成的.so和.o文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值