CSDN一大堆的文章说QT怎么切换多语言我就不说了,尼玛没有一个能用的。问题就在于路径不对:
void MainWindow::on_pushButton_3_clicked(){ QTranslator m; if(m.load("./Duoyuyan_us_EN.qm") ){ qApp->installTranslator(&m); ui->retranslateUi(this); }else QMessageBox::information(NULL,NULL,"加载文件失败"); }
1、上面这个代码,./Duoyuyan_us_EN.qm必须在exe文件同目录,我们新建QT工程时,他会新建一个build的目录出来exe,跟源文件CPP不一样,而使用工具生成的qm偏偏放在CPP目录,这时就要把qm拷贝到exe目录才能load成功。
2、除了上面直接用文件系统加载qm文件,还可以通过exe本身的资源来加载,这时就要新建资源文件,然后通过
load(":/xxx.qm")来加载。
说白了就是./和:/的区别,这些掉毛为何不说害死小白呢?
3、ios和安卓都是引用一个字符串然后对应翻译语言,例如 LOAD("FILE"),这个FILE再翻译成中文“文件”,英文“File”,也就是说“FILE”相当于宏定义。但是QT呢,可以直接用第一语言来显示。
例如我们设计UI时,直接在控件的text属性写入“文字”,然后新建一个EN.qm多语言,翻译时只要“文字”对应“Charactic”即可,也就是说,第一语言的“文字”就是宏定义!
切换时只要 installTranslator(),要恢复第一语言,只要removeTranslator()即可!
QTranslator:谢分享,大彻大悟!真的没人说这些...
2022-04-17 01:16:01 回复