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" ...
随机推荐
- SparkSQL
Spark SQL Spark SQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrame和DataSet,并且作为分布式SQL查询引擎的作用. Hive SQL是转换成 ...
- vue 事件修饰符
1.用.stop来阻止冒泡(点击click按钮之后,先执行clickBtn2方法,然后执行clickBtn1方法,.stop命令阻止了clickBtn1方法的执行) 2.使用.prevent命令来阻止 ...
- 理解WindowManagerService
--摘自<Android进阶解密> *WMS的职责* 1)窗口管理 WMS负责窗口的启动.添加和删除,另外窗口的大小和层级也是由WMS进行管理的 2)窗口动画 WMS的动画子系统Windo ...
- idea+scala sdk + scala插件
0X01 前言 我的主语言是python,说起java,想起了大二(三年前)上课时教过,课程设计的时候曾经做过个俄罗斯方块,后面其他设计copy代码读懂代码(再后面的课设就用python了). 本次涉 ...
- Pi 3B+编译安装python3.6.8
树莓派镜像版本2018-11-13,更新到2019-01-09 sudo apt-get update sudo apt-get upgrade -dev libgdbm-dev libsqlite3 ...
- 到位App_jQuery_art-template
到位 App 不写 node 服务器,本地模拟 ajax 获取 json 数据 源代码 ---- 参见 ---- 使用 webstorm 运行 index.html 本地静态的 data.json 前 ...
- 4.21Linux(2)
2019-4-21 22:46:55 今天买了阿里云服务器1年的 116大洋!!! 但是有个服务器感觉很爽!!!!Linux系统还是很有意思的!!!! 直接贴上笔记! 越努力,越幸运!永远不要高估自己 ...
- CSS面试细节整理(二)
5.css盒模型: CSS 框模型 (Box Model) 规定了元素框处理元素内容.内边距.边框 和 外边距 的方式
- python Cookie Session 相关用法
Cookie一.前言1.http协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响 应情况直接影响,也不会直接影响后面的请 ...
- .net Core 2.0应用程序发布到IIS上注意事项
.net Core2.0应用程序发布window服务器报错容易错过的配置. 1.应用程序发布. 2.IIS上新建网站. 3.应用程序池选择无托管代码. 4.服务器上安装DotNetCore.1.0.1 ...