Qt QDialogButtonBox 英文翻译问题

来源:互联网 发布:个人云计算 编辑:程序博客网 时间:2024/06/05 01:08
环境:Qt 5.3.1 + vs2013


问题:
使用Qt Creator拖拉QDialogButtonBox到界面上,设计下,显示两个标准按钮:“确定”、“取消”。运行,结果两个按钮显示为 “OK”,“Cancel”。QMessageBox、QInputDialog……等均有此问题。

解决过程:
1,google方案:复制qt_zh_CN.qm放入到工作目录下(或者作为资源编译进项目),使用QTranslator加载,QApplication.installTranslator(...).

结果:无效。

----------------------------

现在来跟踪源代码:
1,在Qt安装目录的src文件夹下,找到源文件QDialogButtonBox.cpp(Qt设计特点:类名对应源文件名,很方便include。搜索文件的话推荐使用Everything,速度快到令人发指的搜索神器)。

2,找到QDialogButtonBoxPrivate ::createButton,其中有这么一句代码:
QPushButton * button = new QPushButton (QGuiApplicationPrivate ::platformTheme ()-> standardButtonText( sbutton ), q);

3,F11跟进。QGuiApplicationPrivate::platformTheme()->standardButtonText()。看到如下代码:
     switch ( button ) {    case QPlatformDialogHelper ::Ok :        return QCoreApplication ::translate ("QPlatformTheme" , "OK" ); ....

4,得知:依然是使用的translator嘛!那还得回到Translator上了。但是现在它使用的Contex名是QPlatformTheme,而不是QDialogButtonBox这样的类名。

5,找到qt_zh_CN.ts (注意是 .ts,这是一个xml格式的文件,经过编译可得到 .qm 文件。关于使用linguist)。搜索,里面根本没有QPlatformTheme的定义。那就怪不得translator不起作用了。

6,问题找到了,现在qt_zh_CN.ts里面手动添加:
<context>    <name>QPlatformTheme</name>    <message>        <location filename="../src/widgets/qdialogbuttonbox.cpp" line="+42"/>        <location line="+18"/>        <source>OK</source>        <translation>确定</translation>    </message>    <message>        <location line="+54"/>        <source>Cancel</source>        <translation>取消</translation>    </message>.....</context>

重新编译生成 .qm文件,加载之。


搞定。


0 0
原创粉丝点击