Qt国际化之tr()在自定义类中翻译无效的问题


  1. 参考博客:https://www.cnblogs.com/lsgxeva/p/7814072.html

1,自定义类中tr()封装的文本翻译不生效

这个问题困扰了我一整天,最后发现是自己的锅,分享出来,希望对大家有所帮助。
问题现象:

我自定义了一个MyDialog类,继承自QDialog,在MyDialog.h中也添加了 Q_OBJECT 宏。tr() 翻译功能就是不生效。网上一时也找不到解决方案,心态要崩了,QAQ...

仔细回想了一下整个Demo的创建过程,这个Demo是从以前的一个Demo中扩展过来的,MyDialog类是后定义的,有一点不同的是:原来ts文件中不包含MyDialog类的翻译文本。因为只需要翻译1个文本,因此没有使用Qt自带的语言家进行增量翻译,手动修了 ts 文件,再用修改后的 ts 文件生成了新的 qm 翻译文件,进行测试,结果,凉凉....

回去仔细看了一下ts文件的结构,

发现一个特殊的标签:<name>MainWindow</name>,MainWindow是UI类的类名,突然就明白了。我们都知道tr()最终是调用:

QString QCoreApplication::translate(const char * context, const char * sourceText, const char * disambiguation, Encoding encoding, int n)

实现翻译的,translate函数有一个参数cantext:官方原文:context is typically a class name ,问题找到了。修改 ts 文件,为MyDialog类新建一个<context> ... </context>节点,如下:

编译、测试,果然解决了问题。

嗯,把这坑埋了...