Qt QDialogButtonBox 英文翻译问题

环境: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文件,加载之。


搞定。


你可能感兴趣的:(C++,qt,疑难杂症)