QT国际化, 运行时改变界面语言, 利用QT实现国际化应用程序

Qt在应用程序的国际化方面做了很多工作,Qt可以实现在运行时动态改变应用程序的界面语言,下面以一个简单的例子一步一步教你如何实现之.

Qt是跨平台的开发环境,这里以MAC上的QTSDK4.6.2为例,您可以在其它平台下按此操作步骤一样没问题.

好的,让我们开始吧:

    1. 首先我们创建一个Qt4Gui Application

    2. 去掉那个讨厌的ToolBar,加入如下控件:

      QComboBox对应的名字(ID) changeCombox
      QTextEdit --------------------- infoTxt
      QLabel ----------------------- tipTxt

      双击QComboBox,changeCombox这个控件加入如下条目(Items)

注意我们把transatable去掉,意为我们将不会动态改变combobox里面的语言,如果改combobox里面的内容,则在动态切换语言时造成comboboxchangedindex紊乱.因为切换语言的过程中,combobox里面的内容被动态更改.

    1. 更改构造函数:

      MainWindow::MainWindow(QWidget*parent) :

      QMainWindow(parent),

      ui(newUi::MainWindow)

      {

      ui->setupUi(this);

      ui->infoTxt->setText(tr("Hello,moon.","This is a Text Edit Control."));

      this->setWindowTitle(tr("Translatetest", "windowTitle"));

      }

    2. 在此之前,我们先要翻译我们程序运行时所要用的语言,具体如下:

    • 打开Muti_Language_APP.pro文件,加入:
      TRANSLATIONS+= US.ts ZH.ts JAN.ts

    • 打开终端,转到你的工程目录下,输入lupdateMuti_Language_APP.pro,将会显示如下结果:

      Updating'US.ts'...

      Found8 source text(s) (8 new and 0 already existing)

      Updating'ZH.ts'...

      Found8 source text(s) (8 new and 0 already existing)

      Updating'JAN.ts'...

      Found8 source text(s) (8 new and 0 already existing)

    • 这个时候会在工程目录下生成US.ts ZH.tsJAN.ts三个文件,这三个文件为XML格式,其实记录的是需要翻译的文本,可以任意打开一个看看.我们现在打开Linguist工具(QT自带的语言翻译工具),将三个.ts文件拖入,相信你会知道如何进行下一步操作.

    • 当你翻译好后,请选择File->SaveAll, File->Release All,这时会在项目目录下生成我们最终所需要的三个qm文件,qm文件为二进制文件,程序换语言时就从这里面查找.

    1. 好了,现在我们加上一个qrc文件,File->New File or Project, 选择qrc文件.首先addprefix,我们就用/好了.addfiles,将三个qm文件选上,保存.

    2. changeCombox添加slot:
      combobox上右键:Goto slots: 选择:on_changeCombox_currentIndexChanged(int)信号.

    1. mainwindow.cpp中加入编写slot事件代码:

voidMainWindow::on_changeCombox_currentIndexChanged(int lang)

{

static QTranslator*translator;

QString language;

if (translator)

{

qApp->removeTranslator(translator);

delete translator;

translator = NULL;

}


translator = newQTranslator();

switch(lang)

{

case 0: language ="US";break;

case 1: language ="ZH";break;

case 2: language ="JAN";break;

}


if (translator->load(":/"+ language + ".qm") == FALSE)

{

//handle error here

}


qApp->installTranslator(translator);

}

利用QTranslator便可实现运行时动态改变语言.

    1. 效果截图

从中,你可以看到,textEdit里面的东西 没有 被翻译,因为这里面的文本没有 在ui->retranslateUi(this);这个函数里面实现.你可以重写这个函数.

这里还有一点要注意的是,因为我们把qm文件打包在qrc文件里,所以当我们生成应用程序时,qm文件被打包到exe/app内部去了.如果我们想通过动态改qm文件而不用重新编译应用程序,我们可以把qm文件放在外面独立目录中.

你可能感兴趣的:(C++基础,QT)