问题
Qt 中有很多控件都支持右键点击显示菜单,比如QLineEdit 、 QTextEdit ,QSpinBox 、 QTextBrowser 等控件右击都会显示菜单, 但是默认菜单文字都是英文,当然我们也可以屏蔽菜单, 也可以显示,要是显示中文的话就要加载另外的翻译文件。
对于QLineEdit、QScrollBar 、QSpinBox 等控件需要加载qt_zh_CN.qm翻译文件,这个文件在Qt的安装目录的translations文件夹下。
对于QTextEdit、QPlainTextEdit 、QTextBrowser 等控件需要加载qt_zh_CN**.qm翻译文件,在Qt**的安装目录中找不到此文件,需要自己生成。Qt 在通过加载安装目录的translations文件夹下qt_zh_CN.qm翻译文件无法解决QTextEdit、QPlainTextEdit 、QTextBrowser 等控件的右键翻译失效问题。
问题分析
在qt_zh_CN.qm中QTextEdit归属于QTextControl,而qtbase中生成的QTextEdit归属于QWidgetTextControl因此翻译失效。
解决办法
打开qt-everywhere-opensource-src\qtbase\src\widgets目录,用Qt Creator打开widgets.pro文件,添加一行:TRANSLATIONS += zh_CN.ts
然后在Qt Creator的系统菜单中,选择:工具->外部->Qt语言家->更新翻译,就会在widgets.pro所在目录下生成一个zh_CN.ts文件,用Qt Linguist打开zh_CN.ts,找到QWidgetTextControl,翻译相关选项,然后选择:文件->发布,就会在zh_CN.ts所在目录生产一个zh_CN.qm文件,将zh_CN.qm文件放入资源文件下,然后在main函数中加载
QTranslator p;
p.load(":/zh_CN.qm");
a.installTranslator(&p);
即可解决。