QT国际化动态语言切换的实现(原创) (2012-02-20 11:23:20)

来源:互联网 发布:网络上怼是什么意思 编辑:程序博客网 时间:2024/06/10 20:16

转载

    我的目标是需要在弹出对话框中设置语言,切换语言后,整个工程中的语言都需要重新翻译,包括主窗体和弹出对话框中的。

    目前的方法是,在Dialog中改变radioButton值后,

void LanguageSetting::on_radioButton_SimplifiedChinese_clicked()
{
    emit SwitchLanguageIntoSimplifiedChinese();
}

在on_radioButton_SimplifiedChinese_clicked槽中发送SwitchLanguageIntoSimplifiedChinese信号给主窗体,

 

在主窗体中,用Language_SimplifiedChinese槽接收SwitchLanguageIntoSimplifiedChinese信号,重新load *.qm文件,并调用installTranslator方法。

void MainWindow::Language_SimplifiedChinese()
{
    QFont font("wenquanyi",20,QFont::Normal,FALSE);
    this->setFont(font);
    this->m_LanguageSetting->setFont(font);
    qt_translator->load("LCD_SimplifiedChinese.qm");
    pOwner->installTranslator(qt_translator);
    //qDebug("MainWindow::Language_SimplifiedChinese");
}

调用installTranslator方法后,系统会自动给每个窗体发送信号并告知changeEvent槽event产生,在要切换语言的每个窗体中都要重写changeEvent这个方法,按照下面的格式:

void MainWindow::changeEvent(QEvent *e)
{
    QWidget::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}

想要翻译成其他语言同理,只要按照这个步骤添加即可。

0 0
原创粉丝点击