Qt国际化出错导致汉化不完全

来源:互联网 发布:mysql substring函数 编辑:程序博客网 时间:2024/06/02 15:02

在使用qt的国际化功能时一直出现汉化不完全的现象,比如主窗口的文字都是汉化的,但打开一个子窗口却发现文字是英文的,本来应该被汉化的字符串却没有被汉化(注:翻译qm文件已经生成)。一直都不明白是怎么回事,在csdn也发了几次帖子,但也都没有实质性的解决问题,后来在qt官方论坛发了两个帖子,最终在一个老外的指点下发现了问题的根源,现在将这个问题记录于此,希望对和我一样对qt理解不够深入的人有所帮助。

我出现问题的代码是这样的: 

QTranslator trans;

    trans.load("gui_zh");
    switch(index)
    {
    case 0: //English
        QApplication::removeTranslator(&trans);
        ui->retranslateUi(this);
        break;
    case 1: //Chinese
        QApplication::installTranslator(&trans);
        ui->retranslateUi(this);
        break;
    default:
        break;
    }

在一个函数里面调用QApplication::installTranslator(&trans);    和  QApplication::removeTranslator(&trans);   对翻译文件进行安装和删除,由于这段代码是从项目原有开发人员的手里接过来的,我也就没有怀疑其正确性,也就一直在项目中沿用这种写法。

老外告诉我,QApplication::installTranslator(&trans);  这个函数需要在类的构造函数中写,而不能在生成窗体后再使用,他让我回头去看相关的文档,里面有介绍,但我找了一圈也没找到哪里有说需要在构造函数中调用难过

下面是经过更改后的代码,像这样就能正常的对所有的需要翻译的字符串进行翻译了:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QApplication::instance()->installTranslator(&translator);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_E_clicked()
{
    translator.load(":/language/English.qm");
}

void MainWindow::on_pushButton_C_clicked()
{
    translator.load(":/language/Chinese.qm");
}

void MainWindow::on_pushButton_clicked()
{
    QFileDialog::getOpenFileName(this, MainWindow::tr("open"), "/", "*.c");
}

void MainWindow::changeEvent(QEvent *e)
{
    if(e->type() == QEvent::LanguageChange)
    {
        ui->retranslateUi(this);
    }

    QMainWindow::changeEvent(e);
}

 

在构造函数中安装翻译器,在其他函数中对翻译器加载的文件进行修改(中文或者英文),在事件函数changeEvent(QEvent *e)中进行重新翻译ui->retranslateUi(this);

示例代码:http://pan.baidu.com/s/1qWo9Kew

 

 

0 0
原创粉丝点击