假设您有QT语言家的基础知识,假设网上那些所有的问题您都已经排查过了,但依然翻译不生效,那么可以看下这篇帖子,其实就一个问题,变量的生命周期,假设QTranslator是一个函数内的变量,且没有被声明为指针,那么函数执行结束这个变量就被释放掉了,也就是你的应用还没来得及加载这些翻译内容,变量已经被清空了,但为什么网上有一些例子这样写又成功了呢,我猜测是因为他们的项目足够小,在变量被释放前需要翻译的那三四个单词已经翻译完成了。下面举例说明。
int main(int argc, char *argv[])
{QApplication app(argc, argv);QTranslator translator;translator.load("trans_zh_CN.qm");app.installTranslator(&translator);return app.exec();
}
比如上面这段代码,QTranslator translator,可以能是事件循环的第一次循环结束后,已经被释放,这中间是有一段时间的,可能是几十毫秒,几百毫秒,这个时间加载量很小的翻译文件时没问题的,但是项目稍大就不行了,所以此处将QTranslator translator;定义为类的成员变量,或者new出来就可以解决这个问题。
上述关于事件循环的知识点,以及是否在事件循环第一次执行完以后变量就被释放掉全部是我猜测的,正确与否请自行辨别。