QT开发(九)—— Qt实现应用内动态切换语言,使用Qt语言家编译字体包
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语言家编译字体包相关推荐
- [转]使用QT开发GoogleMap瓦片显示和下载工具
第一节 之前做项目的时候经常遇到需要大量地图背景数据,然后没有数据被逼着去Google上下载瓦片数据在拼接成整张影像的工作,其实遥感影像晚上有很多可以下载到的,但是大部分是作为研究用的,作为GIS的背 ...
- Qt安装—图文并茂搭建VS2008/2010+QT开发环境
VS2008: (一)工欲善其事,必先利其器,废话不多讲. 总结起来网上流行的VS2008+QT安装说明有以下几个问题需要解释清楚: 1,首先明确需要下载什么版本的QT.网上流行的安装说明只 ...
- qt开发教程视频c++入门自学qt5.5课程linux gui程序实战案例opia
-//A25 QT教程/ ├──Qt 5开发教程 | ├──Qt初级教程 | | ├──第10课&基于Widget的GUI编程 – 其他控件 | | ├──第11课&基于Widget的 ...
- Ubuntu20.04下 嵌入式 Qt 开发环境的搭建(适用于Tiny6410)
Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建 目录导航 Ubuntu 下 Tiny6410 嵌入式 Qt 开发环境的搭建 前言 1.安装前的准备工作 2.安装交叉编译器 3.安装t ...
- QT开发(十七)——QWT简介
QT开发--QWT简介 一.QWT简介 QWT,即Qt Widgets for Technical Applications,是一个基于LGPL版权协议的开源项目, 可生成各种统计图,是为具有技术专业 ...
- VS+QT开发Ocx/ActiveX控件 一
VS+QT开发Ocx/ActiveX控件 一 VS+QT开发Ocx/ActiveX控件-------网页中全屏 二 QT开发ActiveX控件 一:所用IDE版本,需用管理员权限 二:创建Active ...
- 【Qt一骚操作】Qt 开发中触发鼠标悬停事件
Qt 开发中触发鼠标悬停事件 (1)setAttribute( Qt::WA_Hover,true) //在构造函数中 ui->btnGetRadarPara->setAttribute( ...
- 【QT基础入门】1、QT开发环境搭建
文章目录 一.学习所需要的软件 二.安装 VS2012 三.win10 下安装 QT 一.学习所需要的软件 Visual Studio 2012 Qt SDK 4.7.4 Qt Creator 2.4 ...
- VS2019 Qt开发环境搭建与配置
目录 更新说明 学习Qt.安装Qt环境的困扰 问题1:该选什么操作系统,该用MinGW还是msvc ? 问题2:如果用visual studio该安装哪个qt版本? 问题3:Qt开发商业软件需要付费授 ...
- Qt开发MQTT(一) 之Qt官方Qt MQTT
概述 Qt开发MQTT程序有两种方式,一个是Qt官方提供的基于MQTT的封装,一个是第三方(EMQ)开发的用于Qt调用MQTT的接口,二者使用方法大同小异,并且均提供了源码.那么,这里先来介绍第一种, ...
最新文章
- OCP读书笔记(5) - 使用RMAN创建备份
- iOS-----Xcode-Debug尝试
- socket_循环发送消息
- LiveVideoStack线上交流分享 ( 五 ) —— 在线教育音视频技术探索与应用
- 最新!Vicor 270V-28V DCM5614以96%效率提供1300W功率
- html是什么1002无标题,Jsf页面为普通/无标题的文本html
- Fences桌面图标分类
- Python--详解Python中re.sub
- linux c curl 乱码,curl获取结果乱码的解决方法之CURLOPT_ENCODING(curl/Post请求)
- vs2005下使用ASPNetPage分页的例子1
- python计算皮尔森相关系数
- Ubuntu18.04下部署Honeyd蜜罐(完整过程)
- Unity5.3官方VR教程重磅登场-系列4 VR中的用户界面
- 大学生程序设计邀请赛(华东师范大学)A. 拼音魔法
- 截屏、文字提取一气呵成,超实用 OCR 开源小工具
- css button按钮点击或者划过背景色填充
- 12个球,其中有1个坏球和其他11个重量不一样,给你一个天平,称3次,找出不一样的那个
- Mathematica保姆级教程
- 黑苹果oc清除nvram_黑苹果完善之路-英特尔蓝牙「开启/关闭」功能完善教程
- java四则运算程序_java实现四则运算程序