简介
Qt Linguist 提供了一套加速应用程序翻译和国际化的工具。Qt 使用单一的源码树和单一的应用程序二进制包就可同时支持多个语言和书写系统。
使用 QTranslator 来加载生成的 qm 文件,就可以让程序显示指定的语言。
// 国际化翻译
QString language = "CH"; // 默认为中文,后期可以使用ini方式保存语言选项
QTranslator translator;
translator.load(QString(":/Translate_") + language);
a.installTranslator(&translator);
要进行多语言的切换,需要执行以下步骤:
- 对用户可见的文本信息全部使用 tr() 进行封装
- 提供用户可以用来切换语言的一种方法。
- 对于每一个窗口部件或者对话框,重写 changeEvent
事件,当事件类型为QEvent::LanguageChange时,翻译文本进行重新调用(为了简单我把它放在一个单独的函数translateUI()中)。
多语言切换实例效果
添加翻译源
为了方便,这里只介绍中、英文之间的切换。
在pro中添加:
TRANSLATIONS += Translate_EN.ts
Translate_CH.ts
选择:工具->外部->Qt 语言家->更新翻译,则会生成对应的 ts 文件
翻译
发布翻译
选择:文件->发布,就会生成对应的 qm 文件。
源码分析
我们来看一个简单的示例:主界面可根据选择不同语言下拉选项实现语言的动态切换!
main.cpp:
#include "Translate.h"
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 国际化翻译
QString language = "CH"; // 默认为中文,后期可以使用ini方式保存语言选项
QTranslator translator;
translator.load(QString(":/Translate_") + language);
a.installTranslator(&translator);
Translate w;
w.setTranslator(&translator);
w.show();
return a.exec();
}
Translate.h:
#ifndef TRANSLATE_H
#define TRANSLATE_H
#include
#include
#include
#include
#include
#include
#include
#include
class Translate : public QWidget
{
Q_OBJECT
public:
Translate(QWidget *parent = nullptr);
void setTranslator(QTranslator* translator); // 设置翻译对象
protected:
void changeEvent(QEvent *event); // 改变事件
private:
void translateUI(); // 统一设置需要被翻译的文本
QLabel *m_pLabText;
QComboBox *m_pComboBox;
QTranslator *m_translator; // 国际化翻译对象
};
#endif // TRANSLATE_H
Translate.cpp
#include "Translate.h"
Translate::Translate(QWidget *parent)
: QWidget(parent)
{
// 初始化界面
this->setFixedSize(400, 200);
// 初始化控件
m_pLabText = new QLabel;
m_pComboBox = new QComboBox;
m_pComboBox->addItem("Chinese");
m_pComboBox->addItem("English");
// 主布局
QVBoxLayout *m_pLayoutMain = new QVBoxLayout(this);
m_pLayoutMain->addStretch();
m_pLayoutMain->addWidget(m_pLabText, 0, Qt::AlignCenter);
m_pLayoutMain->addSpacing(20);
m_pLayoutMain->addWidget(m_pComboBox, 0, Qt::AlignCenter);
m_pLayoutMain->addStretch();
m_pLayoutMain->setMargin(0);
// 连接信号槽
connect(m_pComboBox, static_cast(&QComboBox::currentIndexChanged), [=](int index) {
QString language_qm;
if(index == 0)
language_qm = QString(":/Translate_CH.qm");
else
language_qm = QString(":/Translate_EN.qm");
m_translator->load(language_qm);
qApp->installTranslator(m_translator); // 安装翻译器
});
// 统一设置需要被翻译的文本
translateUI();
}
// 设置翻译对象
void Translate::setTranslator(QTranslator* translator)
{
m_translator = translator;
}
// 改变事件:调用installTranslator后,系统会给窗体发送信号触发changeEvent事件
void Translate::changeEvent(QEvent *event)
{
switch (event->type())
{
case QEvent::LanguageChange:
translateUI();
break;
default:
QWidget::changeEvent(event);
}
}
// 统一设置需要被翻译的文本
void Translate::translateUI()
{
m_pLabText->setText(tr("这是需要测试的文本"));
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: 图像处理——连接IP摄像头上传到服务器实现目标识别
前言 1.项目的需求是,本地连接IP摄像头,然后把图像上传到图像处理服务器器进行处理,得到的结果返回本地。 2.IP摄像头使用的是大华的摄像头,目标识别用的yolov5的模型,服务器用的是flask,实现语言是python。 3.在实现过程中,需要先进行IP摄…