您的位置:首页 > 编程语言 > Qt开发

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

2013-12-31 16:22 239 查看
在使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: