假設您有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出來就可以解決這個問題。
上述關于事件循環的知識點,以及是否在事件循環第一次執行完以后變量就被釋放掉全部是我猜測的,正確與否請自行辨別。