最近项目使用的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

  1. class translate : public QWidget
  2. {
  3. Q_OBJECT
  4.  
  5. public:
  6. translate(QWidget *parent = );
  7. ~translate();
  8.  
  9. public:
  10. void SetCurrentTranslate(QTranslator * translator);
  11.  
  12. private slots:
  13. void CurrentLanguageChanged(int);
  14.  
  15. private:
  16. void Translate();
  17.  
  18. private:
  19. Ui::translateClass ui;
  20. QTranslator * translator;
  21. };
translate.cpp

  1. translate::translate(QWidget *parent)
  2. : QWidget(parent)
  3. {
  4. ui.setupUi(this);
  5.  
  6. ui.comboBox_langugeType->addItem(tr("chinese"));
  7. ui.comboBox_langugeType->addItem(tr("english"));
  8.  
  9. connect(ui.comboBox_langugeType, static_cast(&QComboBox::currentIndexChanged)
  10. , this, &translate::CurrentLanguageChanged);
  11. }
  12.  
  13. translate::~translate()
  14. {
  15.  
  16. }
  17.  
  18. void translate::SetCurrentTranslate(QTranslator * translator)
  19. {
  20. this->translator = translator;
  21. this->Translate();
  22. }
  23.  
  24. void translate::CurrentLanguageChanged(int index)
  25. {
  26. switch (index)
  27. {
  28. case :
  29. {
  30. translator->load(":/translate/translate_zh.qm");
  31. }
  32. break;
  33. case :
  34. {
  35. translator->load(":/translate/translate_en.qm");
  36. }
  37. break;
  38. }
  39. this->Translate();
  40. }
  41.  
  42. void translate::Translate()
  43. {
  44. ui.comboBox_langugeType->setItemText(, tr("chinese"));
  45. ui.comboBox_langugeType->setItemText(, tr("english"));
  46. ui.label_tip->setText(tr("label"));
  47. ui.label->setText(tr("language:"));
  48. ui.pushButton_ok->setText(tr("ok"));
  49. ui.pushButton_quit->setText(tr("quit"));
  50. }

  

经此一用,中文到控件上乱码的问题也顺带完美解决了,享受了一次轻松多国语实现的过程

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. Alpha冲刺(3/10)——2019.4.25

    作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Alpha冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 ...

  2. JAVA基础复习与总结<六> 数组_容器_泛型

    数组的常用方法 java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的. 具有以下功能: 给数组赋值:通过 fill 方法. 对数组排序:通过 sort 方法,按升序. 比较 ...

  3. Java是值传递还是引用传递?

    Java的值传递和引用传递在面试中一般都会都被涉及到,今天我们就来聊聊这个问题.这个问题一般是相对函数而言的,也就是Java中所说的方法参数,那么我们先来回顾一下在程序设计语言中有关参数传递给方法的两 ...

  4. JQuery模拟常见的拖拽验证

    css部分 <style> #drag{ position: relative; background-color: #e8e8e8; width: 300px; height: 34px ...

  5. ORACLE启动报错ORA-03113: end-of-file on communication channel

    使用过程中发现oracle运行很慢(其实应该先关注空间问题),就准备关机重启一下,关不掉就强制关闭,然后启动就报错了. 1.SQL> startup ORACLE instance starte ...

  6. 微信小程序统计分析

    在微信公众平台社区看到一个不错的东西,小博统计:https://www.wxappdev.com/:用于微信小程序统计分析.

  7. UVALive 2474 Balloons in a Box(枚举)

    https://vjudge.net/contest/277824#problem/A 尤其是模拟题,三思而后敲!!! 纠错了好久,主要还是没有处理好:单点若还未放气球,其他气球可以膨胀越过它(即可以 ...

  8. [LeetCode] New 21 Game 新二十一点游戏

    Alice plays the following game, loosely based on the card game "21". Alice starts with 0 p ...

  9. 清理 zabbix 历史数据, 缩减 mysql 空间

    zabbix 由于历史数据过大, 因此导致磁盘空间暴涨,  下面是结局方法步骤 1. 停止 ZABBIX SERER 操作 [root@gd02-qa-plxt2-nodomain-web-95 ~] ...

  10. sqlmap Windows 安装教程

    第一步:下载 python :https://www.python.org/downloads/    (这里有python各种版本,但是一般建议安装3和2.7) sqlmap:https://git ...