使用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方法会按照实际本次的文本内容进行设置,所以可能会破坏翻译效果,所以调用翻译的时机应该是控件加载显示之前

posted @   小徐的小菜园  阅读(678)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示