首页 > 其他分享 >使用qtranslator遇到的坑

使用qtranslator遇到的坑

时间:2024-05-29 20:34:34浏览次数:27  
标签:文件 翻译 Qt 遇到 qscurpath ts 使用 qtranslator 加载

需求:使用Qt + C++的项目支持中/英文界面

Qt:QTranslator类

  头文件:#include <qtranslator.h>

要翻译的语句都要加上tr("待翻译的内容")
不属于Qt部分的类需要继承QObject后使用tr();

class CGlobalVariant : QObject
{
	Q_OBJECT
}

生成ts文件
网上找到生成ts文件的一种方法是使用Qt VS Tools中的create translator file,但是我这里版本没有,只能通过新建项目中的create translator file


选择语言生成.ts文件

ts文件生成后有遇到了新的问题,使用linguist打不开ts文件,提示内容empty,无论怎么lupdate都不行,后来想通过qt工具来实现成功

生成.pro文件后,通过这个文件打开Qt Creator

外部-Qt预言家-更新lupdate


再通过vs打开linguist,加载ts文件就可以看到所有待翻译的内容了

完成翻译编辑后发布全部生成qm文件

加载qm文件

    QTranslator *myLanguage = new QTranslator(qApp);    /// 创建翻译器
	QString qscurpath = QCoreApplication::applicationDirPath();
	if (index == 0)
	{
		qscurpath = qscurpath + "/Translation_zh.qm";    /// 加载qm文件
	
	}
	else if (index == 1)
	{
		qscurpath = qscurpath + "/Translation_en.qm";
		
	}
	myLanguage->load(qscurpath);            /// 加载语言包
	qApp->installTranslator(myLanguage);    /// 软件加载翻译器
	ui.retranslateUi(this);                  ///翻译

加载了翻译器后,在需要翻译的类内,执行ui.retranslateUi(this); 即可翻译当前类包含的所有控件和类内tr语句
需要注意的是retranslateUi实际上是翻译语句后重新调用了setText(),理论上翻译完成后,再次调用setText方法会按照实际本次的文本内容进行设置,所以可能会破坏翻译效果,所以调用翻译的时机应该是控件加载显示之前

标签:文件,翻译,Qt,遇到,qscurpath,ts,使用,qtranslator,加载
From: https://www.cnblogs.com/xujiangsu/p/18220955

相关文章

  • Vue3使用Composition API实现响应式
    title:Vue3使用CompositionAPI实现响应式date:2024/5/29下午8:10:24updated:2024/5/29下午8:10:24categories:前端开发tags:Vue3CompositionRefsReactiveWatchLifecycleDebugging1.介绍CompositionAPI是Vue.js3中新增的一组API,用于在组件中组合逻辑......
  • Vue3使用Composition API实现响应式
    title:Vue3使用CompositionAPI实现响应式date:2024/5/29下午8:10:24updated:2024/5/29下午8:10:24categories:前端开发tags:Vue3CompositionRefsReactiveWatchLifecycleDebugging1.介绍CompositionAPI是Vue.js3中新增的一组API,用于在组件中组合逻辑和功......
  • anaconda的安装和使用
    anaconda的安装和使用Anaconda是一个用于科学计算和数据分析的开源发行版,包含了Python和R的众多包和管理工具。以下是Anaconda的安装和使用指南:1.安装Anaconda1.1下载Anaconda访问Anaconda官网下载适用于你操作系统的Anaconda安装包。1.2安装AnacondaWindows:运行下......
  • Django 里如何使用 sqlite (操作步骤)
    下面是在VSCode里进行操作1.安装SQLite的Extension2.在models.py里做修改文件修改如下fromdjango.dbimportmodels#Createyourmodelshere.#类似这样创建一个classclassUserInfo(models.Model):username=models.CharField(verbose_name="......
  • 2252309-介绍主流源代码管理工具--Github(举例说明具体使用--旅行+兼职平台)
    一、Github介绍目录1、简介2、特点3、优点4、缺点5、使用教程6、举例二、详细介绍1、简介(1)Github的产生:软件开发过程中会因源代码引发各种繁琐的问题,如版本备份(费空间,费时间)、版本混乱(因版本备份过多造成混乱,难以找回正确的想要版本)、代码冲突(团队开发过程中多人操作同......
  • 【Rust】——使用消息在线程之间传递数据
    ......
  • MQTT和kafka搭配使用 集成 emq iot 物联网
    MQTT历史MQTT协议于1999年发明,用于石油和天然气行业。工程师需要一种协议来实现最小带宽和最小电池损耗,以通过卫星监控石油管道。最初,该协议被称为MessageQueuingTelemetryTransport(消息队列遥测传输),得名于首先支持其初始阶段的IBM产品MQ系列。2010年,IBM发布了......
  • 使用 opencv 实现模板匹配功能前的预处理要求
    我使用opencv.TM_CCOEFF_NORMED函数来匹配发票模板。但是,模板匹配功能并没有产生准确的结果。匹配准确率相当低,只有50%。您能否建议我在流程中应包含或更改哪些内容以提高准确性?templateMap=cv.matchTemplate(img_r,resized_template,cv.TM_CCOEFF_NORMED)m......
  • 使用shell脚本替换csv文件中的数据
    [observer@xxx-grey-openrestytest]$catfile.csvbeijing,beijing,lisi,10shanxi,xian,tom,6shanghai,shanghai,xiaoming,3guangdong,guangzhou,wangwu,8sichuan,chengdu,cat,5[observer@xxx-grey-openrestytest]$awk-F,-vOFS=,'$4>5{$4=3}{print......
  • 在kubernetes里使用AppArmor限制容器对资源的访问
    目录一.系统环境二.前言三.AppArmor简介四.AppArmor和SELinux的区别五.使用AppArmor限制nginx程序访问目录5.1安装nginx5.2修改nginx的默认主页5.3安装AppArmor实用工具5.4AppArmor规则解释5.5配置AppArmor规则限制nginx程序访问目录六.在kubernetes里使用AppArmor限制容器对......