最近项目使用的qt版本升级,导致了界面乱码问题,因此最后决定利用qt的多语化机制,来解决乱码问题,首先感谢这两篇文字的帮助,在此加上作者链接:Qt之多语化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.cpp

 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 多语化的更多相关文章

  1. 行业干货-如何逆向解决QT程序汉化中乱码问题

    前言 “一款QT开发的国外软件,大概率是没有做中文支持的,所以你汉化中,不论怎么设置编码都一定是乱码.面对这个问题,你去互联网上找答案,答案却大多是复制粘贴的开发中解决乱码的文章,可是我们是要逆向中解 ...

  2. Qt串行化的输入和输出(使用QDataStream读写QByteArray,对QIODevice直接起作用)

    参考https://lug.ustc.edu.cn/sites/qtguide/ 今天看了一个介绍Qt串行化的介绍,感觉很受益,就记录了下来. 串行化(Serialization)是计算机科学中的一个 ...

  3. 剖析QMenu & Qt完全定制化菜单

    贴张效果图:  定制包括: 1. 周边阴影 2. 菜单项的元素(分割符, 控制ICON大小, 文字显示位置与颜色, 子菜单指示符) 菜单内的效果, 部分可以使用stylesheet实现, 但要做到这样 ...

  4. qt窗口最小化之后无法打开

    转自: https://blog.csdn.net/qiangzi4646/article/details/79743604 http://www.cnblogs.com/lingdhox/p/331 ...

  5. 【QT】子类化QThread实现多线程

    <QThread源码浅析> 子类化QThread来实现多线程, QThread只有run函数是在新线程里的,其他所有函数都在QThread生成的线程里.正确启动线程的方法是调用QThrea ...

  6. 【QT】子类化QObject+moveToThread实现多线程

    往期链接: <QThread源码浅析> <子类化QThread实现多线程> 从往期<QThread源码浅析>可知,在Qt4.4之前,run 是纯虚函数,必须子类化Q ...

  7. qt添加最小化和关闭按钮

    int width = this->width();//获取界面的宽度 //构建最小化.最大化.关闭按钮 QToolButton *minButton = new QToolButton(thi ...

  8. QT自定义控件插件化简要概述

    1.选择 "其他项目"->"Qt4 设计师自定义控件" **最好选中所有的编译器平台,由于目前使用的Qt Creator是MSVC2015 32位,因此要 ...

  9. 44.Qt通过子类化qstyle实现自定义外观

    main.cpp #include <QtGui> #include "brozedialog.h" #include "bronzestyle.h" ...

随机推荐

  1. Amazon新一代云端关系数据库Aurora

    在2017年5月芝加哥举办的世界顶级数据库会议SIGMOD/PODS上,作为全球最大的公有云服务提供商,Amazon首次系统的总结了新一代云端关系数据库Aurora的设计实现.Aurora是Amazo ...

  2. SVM原理 (转载)

    1. 线性分类SVM面临的问题 有时候本来数据的确是可分的,也就是说可以用 线性分类SVM的学习方法来求解,但是却因为混入了异常点,导致不能线性可分,比如下图,本来数据是可以按下面的实线来做超平面分离 ...

  3. CF987B - High School: Become Human

    Year 2118. Androids are in mass production for decades now, and they do all the work for humans. But ...

  4. 网络对抗技术 20165220 Exp6 信息搜集与漏洞扫描

    网络对抗技术 20165220 Exp6 信息搜集与漏洞扫描 实验任务 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服 ...

  5. C++ Json解析CJsonObject的详细使用

    引用头文件: #include <string> #include <iostream> #include <fstream> #include <casse ...

  6. python3.5.2库getpass

    getpass的功能是:允许隐式的输入字符串 import getpass _username='vigossr' _password='haha' username=input('username: ...

  7. RSP小组——团队冲刺博客一——(领航)

    RSP小组--团队冲刺博客一--领航 冲刺日期:2018年12月10日 团队目标 经过团队讨论,我们最新确定的α版本所需实现内容如下: 1.实现游戏代码的实现 2.在Android Studio上实现 ...

  8. 11-Cookie&Session

    中文文件下载 针对浏览器类型,对文件名字做编码处理 Firefox (Base64) , IE.Chrome ... 使用的是URLEncoder /* * 如果文件的名字带有中文,那么需要对这个文件 ...

  9. 页面的input唤醒软键盘再收起后,页面会出现软键盘高度的空白背景

    微信浏览器在版本6.7.4及以上会有这个bug:页面的input唤醒软键盘再收起后,页面会出现软键盘高度的空白背景,触摸到滚动条会消失恢复! 解决代码 后台框架嵌入iframe的情景,iframe内部 ...

  10. 《SpringMVC从入门到放肆》七、模型与视图ModelAndView

    上一篇我们了解了开发一个Controller的4种方法,如果不记得的朋友可以看看上一篇博文,今天我们来继续了解SpringMVC的模型与视图ModelAndView. 一.什么是Model? Mode ...