QT的多国语言做的还算是比较好的,我们来看下如何去做

大致的可以分为如下几个步骤

  • 1.update生成ts文件
  • 2.使用QT语言家生成qm文件
  • 3.加载语言包

我们先来看下如何生成ts文件,实际上这个很简单,我们有两种办法,首先是用IDE自己去编译,我们需要在pro文件中增加配置信息

TRANSLATIONS = Tranlate_EN.ts\Tranlate_CH.ts

这里声明支持两个国家的语言,CH和EN,我们点击工具-外部-Qt预言家-更新翻译

即可,当然,如果你喜欢用命令行,可以在项目的根目录中

lupdate -verbose xx.pro

,我们使用的是IDE的方式,我觉得方便一些,然后可以看到控制台输出

提示的是找到五个文件,现在回到我们的项目根目录就可以看到这两个文件了

紧接着第二步就是具体的翻译了,我们打开预言家Linguist

我们直接来翻译英文

翻译完成后点击File - 发布,就可以在项目根目录看到qm文件了

现在就可以在我们的代码中使用了

这里我绘制一个UI

可以看到很简单的UI,就是切换下语言即可,那我们的代码中应该如何去写?

QTranslator * translator;

头文件中只要声明一个QTranslator 指针对象即可,注意要new

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);translator = new QTranslator(this);
}MainWindow::~MainWindow()
{delete translator;delete ui;
}
//切换语言
void MainWindow::on_comboBox_activated(int index)
{qDebug() << QString::number(index);switch (index) {//Chinesecase 0:translator->load("Tranlate_CH.qm");qDebug() << "安装中文";break;//Englishcase 1:translator->load("Tranlate_EN.qm");qDebug() << "安装英文";break;}qApp->installTranslator(this->translator);//刷新UIthis->ui->retranslateUi(this);
}

在这份代码里,我们会跟你用户切换的语言来load对应的语言qm文件,最后会通过installTranslator去安装这个语言包并且刷新UI

这样我们就可以看到效果了

但是这里实际上会发现几个问题的

首先就是你切换不了语言?

那是因为qm文件你找不到,你需要拷贝到你的build目录

然后就是语言选项他始终在简体中文,这是因为retranslateUi导致的

    void retranslateUi(QMainWindow *MainWindow){MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0));label_4->setText(QApplication::translate("MainWindow", "\350\257\255\350\250\200\357\274\232", 0));comboBox->clear();comboBox->insertItems(0, QStringList()<< QApplication::translate("MainWindow", "\347\256\200\344\275\223\344\270\255\346\226\207", 0)<< QApplication::translate("MainWindow", "English", 0));tv_title->setText(QApplication::translate("MainWindow", "\346\210\221\346\230\257\346\240\207\351\242\230", 0));tv_content->setText(QApplication::translate("MainWindow", "\346\210\221\346\230\257\345\206\205\345\256\271", 0));tv_version->setText(QApplication::translate("MainWindow", "\346\210\221\346\230\257\347\211\210\346\234\254\345\217\267", 0));} // retranslateUi

通过源码我们可以看到

comboBox->clear();
comboBox->insertItems(0, QStringList()

只要刷新了UI,他就会重置为0下标,这样就导致了始终是简体中文的bug了,我们如何去解决?

思路就是监听语言切换,判断是否是英文来设置下标,看代码

void MainWindow::changeEvent(QEvent* e)
{if(e->type() == QEvent::LanguageChange){//刷新UIthis->ui->retranslateUi(this);if(!isCH){this->ui->comboBox->setCurrentIndex(1);}}
}

如果你切换了语言我就刷新UI并且判断下语言类型设置对应的下标,这样就可以完美实现了

需要源码的可以加群:690351511

点击下载

QT开发(九)—— Qt实现应用内动态切换语言,使用Qt语言家编译字体包相关推荐

  1. [转]使用QT开发GoogleMap瓦片显示和下载工具

    第一节 之前做项目的时候经常遇到需要大量地图背景数据,然后没有数据被逼着去Google上下载瓦片数据在拼接成整张影像的工作,其实遥感影像晚上有很多可以下载到的,但是大部分是作为研究用的,作为GIS的背 ...

  2. Qt安装—图文并茂搭建VS2008/2010+QT开发环境

    VS2008: (一)工欲善其事,必先利其器,废话不多讲. 总结起来网上流行的VS2008+QT安装说明有以下几个问题需要解释清楚:      1,首先明确需要下载什么版本的QT.网上流行的安装说明只 ...

  3. qt开发教程视频c++入门自学qt5.5课程linux gui程序实战案例opia

    -//A25 QT教程/ ├──Qt 5开发教程 | ├──Qt初级教程 | | ├──第10课&基于Widget的GUI编程 – 其他控件 | | ├──第11课&基于Widget的 ...

  4. Ubuntu20.04下 嵌入式 Qt 开发环境的搭建(适用于Tiny6410)

    Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建 目录导航 Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建 前言 1.安装前的准备工作 2.安装交叉编译器 3.安装t ...

  5. QT开发(十七)——QWT简介

    QT开发--QWT简介 一.QWT简介 QWT,即Qt Widgets for Technical Applications,是一个基于LGPL版权协议的开源项目, 可生成各种统计图,是为具有技术专业 ...

  6. VS+QT开发Ocx/ActiveX控件 一

    VS+QT开发Ocx/ActiveX控件 一 VS+QT开发Ocx/ActiveX控件-------网页中全屏 二 QT开发ActiveX控件 一:所用IDE版本,需用管理员权限 二:创建Active ...

  7. 【Qt一骚操作】Qt 开发中触发鼠标悬停事件

    Qt 开发中触发鼠标悬停事件 (1)setAttribute( Qt::WA_Hover,true) //在构造函数中 ui->btnGetRadarPara->setAttribute( ...

  8. 【QT基础入门】1、QT开发环境搭建

    文章目录 一.学习所需要的软件 二.安装 VS2012 三.win10 下安装 QT 一.学习所需要的软件 Visual Studio 2012 Qt SDK 4.7.4 Qt Creator 2.4 ...

  9. VS2019 Qt开发环境搭建与配置

    目录 更新说明 学习Qt.安装Qt环境的困扰 问题1:该选什么操作系统,该用MinGW还是msvc ? 问题2:如果用visual studio该安装哪个qt版本? 问题3:Qt开发商业软件需要付费授 ...

  10. Qt开发MQTT(一) 之Qt官方Qt MQTT

    概述 Qt开发MQTT程序有两种方式,一个是Qt官方提供的基于MQTT的封装,一个是第三方(EMQ)开发的用于Qt调用MQTT的接口,二者使用方法大同小异,并且均提供了源码.那么,这里先来介绍第一种, ...

最新文章

  1. OCP读书笔记(5) - 使用RMAN创建备份
  2. iOS-----Xcode-Debug尝试
  3. socket_循环发送消息
  4. LiveVideoStack线上交流分享 ( 五 ) —— 在线教育音视频技术探索与应用
  5. 最新!Vicor 270V-28V DCM5614以96%效率提供1300W功率
  6. html是什么1002无标题,Jsf页面为普通/无标题的文本html
  7. Fences桌面图标分类
  8. Python--详解Python中re.sub
  9. linux c curl 乱码,curl获取结果乱码的解决方法之CURLOPT_ENCODING(curl/Post请求)
  10. vs2005下使用ASPNetPage分页的例子1
  11. python计算皮尔森相关系数
  12. Ubuntu18.04下部署Honeyd蜜罐(完整过程)
  13. Unity5.3官方VR教程重磅登场-系列4 VR中的用户界面
  14. 大学生程序设计邀请赛(华东师范大学)A. 拼音魔法
  15. 截屏、文字提取一气呵成,超实用 OCR 开源小工具
  16. css button按钮点击或者划过背景色填充
  17. 12个球,其中有1个坏球和其他11个重量不一样,给你一个天平,称3次,找出不一样的那个
  18. Mathematica保姆级教程
  19. 黑苹果oc清除nvram_黑苹果完善之路-英特尔蓝牙「开启/关闭」功能完善教程
  20. java四则运算程序_java实现四则运算程序

热门文章

  1. 智能车改舵机中值步骤_智能车制作全过程(飞思卡尔)
  2. Matlab 2018b + vs2019
  3. mac上超好用的文字转语音工具【迅捷文字转语音】
  4. 赖世雄英语学习三原则
  5. 蓝牙模块配置串口通讯
  6. 移动CMPP2.0封装
  7. 博信医药系统连接不到服务器,博信医药管理系统
  8. 一揽子修改win10的IP地址
  9. CAD迷你画图V3.6版
  10. 朋友圈加粗字体数字_Excel中Ctrl键与26个字母、10个数字及特殊符号的搭配使用快捷键...