qt 多语化
在项目多语化的文章开始编写之前,我说下qt多语化的思路,很简单,就3步,首先,从项目中获取字符串,然后编辑*.ts文件,填写需要翻译的字符串和对应的翻译后字符串,最后就是更新到项目中
接下来,我详细介绍vs2013+qt5多语化的每一个步骤
1、创建语言文件,如下图,然后translate_zh.hs文件执行lupdate操作,获取工程字符串到该ts文件
2、编辑翻译文件
启动Linguist(Qt语言家),打开cn.ts,然后进行编辑,主要是将源文对应的译文填写上,最后保存
3、部署翻译文件
工具->外部->Qt语言家->部署翻译,将生成语言文件qm
注:随时可以重复“2”~“3”步骤以便更新翻译
下面是qt多语化的一个简单事例,效果如下:



上图中英文显示的时候,有部分中文的原因是,qm文件在配置英文ts文件时的原因,为了演示,故意设置了部分翻译,部分没有翻译,下面贴上程序代码.
main.cpp
int main(int argc, char *argv[])
{
QApplication
a(argc, argv);
QTranslator
translator;
bool b =
false;
b =
translator.load(":/translate/translate_zh.qm");
a.installTranslator(&translator);
translate
w;
w.SetCurrentTranslate(&translator);
w.show();
return
a.exec();
}
translate .h
class translate : public QWidget
{
Q_OBJECT public:
translate(QWidget *parent = );
~translate(); public:
void SetCurrentTranslate(QTranslator * translator); private slots:
void CurrentLanguageChanged(int); private:
void Translate(); private:
Ui::translateClass ui;
QTranslator * translator;
};
translate::translate(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this); ui.comboBox_langugeType->addItem(tr("chinese"));
ui.comboBox_langugeType->addItem(tr("english")); connect(ui.comboBox_langugeType, static_cast(&QComboBox::currentIndexChanged)
, this, &translate::CurrentLanguageChanged);
} translate::~translate()
{ } void translate::SetCurrentTranslate(QTranslator * translator)
{
this->translator = translator;
this->Translate();
} void translate::CurrentLanguageChanged(int index)
{
switch (index)
{
case :
{
translator->load(":/translate/translate_zh.qm");
}
break;
case :
{
translator->load(":/translate/translate_en.qm");
}
break;
}
this->Translate();
} void translate::Translate()
{
ui.comboBox_langugeType->setItemText(, tr("chinese"));
ui.comboBox_langugeType->setItemText(, tr("english"));
ui.label_tip->setText(tr("label"));
ui.label->setText(tr("language:"));
ui.pushButton_ok->setText(tr("ok"));
ui.pushButton_quit->setText(tr("quit"));
}
经此一用,中文到控件上乱码的问题也顺带完美解决了,享受了一次轻松多国语实现的过程
。
qt 多语化的更多相关文章
- 行业干货-如何逆向解决QT程序汉化中乱码问题
前言 “一款QT开发的国外软件,大概率是没有做中文支持的,所以你汉化中,不论怎么设置编码都一定是乱码.面对这个问题,你去互联网上找答案,答案却大多是复制粘贴的开发中解决乱码的文章,可是我们是要逆向中解 ...
- Qt串行化的输入和输出(使用QDataStream读写QByteArray,对QIODevice直接起作用)
参考https://lug.ustc.edu.cn/sites/qtguide/ 今天看了一个介绍Qt串行化的介绍,感觉很受益,就记录了下来. 串行化(Serialization)是计算机科学中的一个 ...
- 剖析QMenu & Qt完全定制化菜单
贴张效果图: 定制包括: 1. 周边阴影 2. 菜单项的元素(分割符, 控制ICON大小, 文字显示位置与颜色, 子菜单指示符) 菜单内的效果, 部分可以使用stylesheet实现, 但要做到这样 ...
- qt窗口最小化之后无法打开
转自: https://blog.csdn.net/qiangzi4646/article/details/79743604 http://www.cnblogs.com/lingdhox/p/331 ...
- 【QT】子类化QThread实现多线程
<QThread源码浅析> 子类化QThread来实现多线程, QThread只有run函数是在新线程里的,其他所有函数都在QThread生成的线程里.正确启动线程的方法是调用QThrea ...
- 【QT】子类化QObject+moveToThread实现多线程
往期链接: <QThread源码浅析> <子类化QThread实现多线程> 从往期<QThread源码浅析>可知,在Qt4.4之前,run 是纯虚函数,必须子类化Q ...
- qt添加最小化和关闭按钮
int width = this->width();//获取界面的宽度 //构建最小化.最大化.关闭按钮 QToolButton *minButton = new QToolButton(thi ...
- QT自定义控件插件化简要概述
1.选择 "其他项目"->"Qt4 设计师自定义控件" **最好选中所有的编译器平台,由于目前使用的Qt Creator是MSVC2015 32位,因此要 ...
- 44.Qt通过子类化qstyle实现自定义外观
main.cpp #include <QtGui> #include "brozedialog.h" #include "bronzestyle.h" ...
随机推荐
- UOJ#129. 【NOI2015】寿司晚宴 动态规划
原文链接www.cnblogs.com/zhouzhendong/p/UOJ129.html 题解 考虑把大于等于 $\sqrt n$ 的质数和小于 $\sqrt n$ 的分开考虑: 1. 小于等于 ...
- 分布式缓存技术之Redis_04Redis的应用实战
目录 1 Redis Java客户端的使用 Jedis 单点连接 Jedis sentinel连接哨兵集群 Jedis sentinel源码分析 Jedis Cluster分片环境连接 Jedis C ...
- PBRT笔记(6)——采样和重构
前言 本文仅作为个人笔记分享,又因为本章涉及多个专业领域而本人皆未接触过,所以难免出错,请各位读者注意. 对于数字图像需要区分image pixels(特定采样处的函数值)和display pixel ...
- Android Studio 中 Live Templates 的使用
Android Studio 中的 Live Templates 是什么? Live Templates 有什么用处? Live Templates 可以理解为:在你编码过程中,IDE自动生成的代码内 ...
- Android应用程序如何使用Internet资源?
思路:连接Internet资源-->分析XML资源-->使用Download Manager下载文件 Android的Internet连接模型和用于分析Internet数据源的Java技术 ...
- [POJ1193][NOI1999]内存分配(链表+模拟)
题意 时 刻 T 内存占用情况 进程事件 0 1 2 3 4 5 6 7 8 9 进程A申请空间(M=3, P=10)<成功> 1 A 2 A B 进程B申请空间(M=4, P=3)< ...
- 学习使用Mendeley1
原文来自:https://www.mendeley.com/guides/desktop/01-desktop-interface 1.添加文件菜单 - 使用此功能将新条目添加到您的Mendeley库 ...
- [JZOJ3615]【NOI2014模拟】数列(平面几何+二维线段树)
Description 给定一个长度为n的正整数数列a[i]. 定义2个位置的f值为两者位置差与数值差的和,即f(x,y)=|x-y|+|a[x]-a[y]|. 你需要写一个程序支持2种操作(k都是正 ...
- timesten报错:error while loading shared libraries: libaio.so.1: cannot open shared object file : No such file or directory
我遇到的这个错是因为缺少依赖:libaio 直接yum -y install libaio 然后重新安装就OK了
- 【转】 微软在.NET官网上线.NET 架构指南
原文地址:http://www.cnblogs.com/shanyou/p/6676357.html. 微软在Visual Studio 2017 正式发布的时候也上线了一个参考应用https://g ...